@yoo-digital/eslint-plugin-angular 2.0.1 → 2.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,7 +29,6 @@ exports.preferBooleanAttributeShorthandRule = {
29
29
  docs: {
30
30
  description: 'Prefer boolean input attribute shorthand when binding to true (e.g., use "disabled" instead of [disabled]="true").',
31
31
  },
32
- fixable: 'code',
33
32
  schema: [],
34
33
  messages: {
35
34
  preferTrue: 'Use attribute shorthand "{{attr}}" instead of [{{attr}}]="true".',
@@ -51,13 +50,10 @@ exports.preferBooleanAttributeShorthandRule = {
51
50
  if (ast.value === true) {
52
51
  const attrName = node.name;
53
52
  const loc = parserServices.convertNodeSourceSpanToLoc(node.sourceSpan);
54
- const start = node.sourceSpan.start.offset;
55
- const end = node.sourceSpan.end.offset;
56
53
  context.report({
57
54
  loc,
58
55
  messageId: 'preferTrue',
59
56
  data: { attr: attrName },
60
- fix: (fixer) => fixer.replaceTextRange([start, end], attrName),
61
57
  });
62
58
  }
63
59
  // [attr]="false" is explicitly ignored - no warning
@@ -19,7 +19,6 @@ exports.requireBooleanAttributeTransformRule = {
19
19
  docs: {
20
20
  description: 'Require booleanAttribute transform on boolean @Input() properties and input() signals.',
21
21
  },
22
- fixable: 'code',
23
22
  schema: [],
24
23
  messages: {
25
24
  requireTransformDecorator: 'Boolean @Input() "{{name}}" must use transform: booleanAttribute',
@@ -28,7 +27,6 @@ exports.requireBooleanAttributeTransformRule = {
28
27
  },
29
28
  defaultOptions: [],
30
29
  create(context) {
31
- const sourceCode = context.sourceCode || context.getSourceCode();
32
30
  return {
33
31
  // Handle @Input() decorator syntax
34
32
  PropertyDefinition(node) {
@@ -65,36 +63,6 @@ exports.requireBooleanAttributeTransformRule = {
65
63
  node: node.key,
66
64
  messageId: 'requireTransformDecorator',
67
65
  data: { name: propertyName },
68
- fix(fixer) {
69
- const decoratorNode = inputDecorator?.expression;
70
- if (!decoratorNode || decoratorNode.type !== 'CallExpression') {
71
- return null;
72
- }
73
- const decoratorStart = decoratorNode.range[0];
74
- const decoratorEnd = decoratorNode.range[1];
75
- const decoratorText = sourceCode.getText(decoratorNode);
76
- // Generate the fixed decorator
77
- let newDecorator;
78
- if (decoratorNode.arguments.length === 0) {
79
- // @Input() → @Input({ transform: booleanAttribute })
80
- newDecorator = '@Input({ transform: booleanAttribute })';
81
- }
82
- else if (decoratorNode.arguments[0].type === 'ObjectExpression') {
83
- // @Input({ ... }) → @Input({ ..., transform: booleanAttribute })
84
- const objExpr = decoratorNode.arguments[0];
85
- const objText = sourceCode.getText(objExpr);
86
- const closingBrace = objText.lastIndexOf('}');
87
- const existingProps = objText.substring(1, closingBrace).trim();
88
- const separator = existingProps ? ', ' : '';
89
- newDecorator = `@Input({ ${existingProps}${separator}transform: booleanAttribute })`;
90
- }
91
- else {
92
- // @Input('alias') → @Input({ alias: 'alias', transform: booleanAttribute })
93
- const aliasArg = sourceCode.getText(decoratorNode.arguments[0]);
94
- newDecorator = `@Input({ alias: ${aliasArg}, transform: booleanAttribute })`;
95
- }
96
- return fixer.replaceTextRange([decoratorStart, decoratorEnd], newDecorator);
97
- },
98
66
  });
99
67
  },
100
68
  // Handle input() signal syntax
@@ -130,24 +98,17 @@ exports.requireBooleanAttributeTransformRule = {
130
98
  prop.value.type === 'Identifier' &&
131
99
  prop.value.name === 'booleanAttribute');
132
100
  // Both BooleanInput type and transform option are required
101
+ // Only skip if BOTH are present
133
102
  if (hasBooleanInput && hasTransformOption) {
134
103
  return; // Already correctly configured
135
104
  }
105
+ // If we reach here, at least one requirement is missing
136
106
  // Report the issue
137
107
  const propertyName = node.id.type === 'Identifier' ? node.id.name : 'unknown';
138
108
  context.report({
139
109
  node: node.id,
140
110
  messageId: 'requireTransformSignal',
141
111
  data: { name: propertyName },
142
- fix(fixer) {
143
- const callStart = callExpr.range[0];
144
- const callEnd = callExpr.range[1];
145
- // Get the default value argument
146
- const defaultValue = callExpr.arguments[0] ? sourceCode.getText(callExpr.arguments[0]) : 'false';
147
- // Build the new call expression
148
- const newCall = `input<boolean, BooleanInput>(${defaultValue}, {\n transform: booleanAttribute,\n })`;
149
- return fixer.replaceTextRange([callStart, callEnd], newCall);
150
- },
151
112
  });
152
113
  },
153
114
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yoo-digital/eslint-plugin-angular",
3
- "version": "2.0.1",
3
+ "version": "2.0.4",
4
4
  "description": "Yoo Digital custom Angular ESLint plugin for enforcing boolean attribute best practices.",
5
5
  "type": "commonjs",
6
6
  "main": "dist/index.js",