eslint-rule-forge 0.4.0 → 0.5.0

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.
@@ -79,40 +79,6 @@ node) => node.parent.type === AST_NODE_TYPES.LogicalExpression &&
79
79
 
80
80
 
81
81
 
82
-
83
-
84
- const findNonNullObjectPairs = (
85
-
86
- sourceCode,
87
-
88
- node) => {
89
- const operands = chainOperands(sourceCode, node);
90
- const pairsFrom = (index) => {
91
- const first = operands[index];
92
- const second = operands[index + 1];
93
- if (first === undefined || second === undefined) {
94
- return [];
95
- }
96
- const identifierName = pairIdentifierName(first, second) ?? pairIdentifierName(second, first);
97
- return identifierName === undefined
98
- ? pairsFrom(index + 1)
99
- : [
100
- {
101
- range: [
102
- getRangeWithParens(sourceCode, first)[0],
103
- getRangeWithParens(sourceCode, second)[1],
104
- ],
105
- identifierName,
106
- },
107
- ...pairsFrom(index + 2),
108
- ];
109
- };
110
- return pairsFrom(0);
111
- };
112
-
113
-
114
-
115
-
116
82
  const chainOperands = (
117
83
 
118
84
  sourceCode,
@@ -124,22 +90,9 @@ node) => [node.left, node.right].flatMap((operand) => operand.type === AST_NODE_
124
90
  : [operand]);
125
91
 
126
92
 
93
+ const isLiteralOf = (
127
94
 
128
-
129
-
130
-
131
- const pairIdentifierName = (
132
-
133
- typeofCheck,
134
-
135
- nullCheck) => {
136
- const identifierName = getTypeofObjectIdentifierName(skipTypeWrappers(typeofCheck));
137
- return identifierName !== undefined &&
138
- identifierName ===
139
- getNonNullCheckIdentifierName(skipTypeWrappers(nullCheck))
140
- ? identifierName
141
- : undefined;
142
- };
95
+ node, value) => node.type === AST_NODE_TYPES.Literal && node.value === value;
143
96
 
144
97
  const getTypeofObjectIdentifierName = (
145
98
 
@@ -185,7 +138,54 @@ node) => {
185
138
  : undefined;
186
139
  return checked?.type === AST_NODE_TYPES.Identifier ? checked.name : undefined;
187
140
  };
188
- const isLiteralOf = (
189
141
 
190
- node, value) => node.type === AST_NODE_TYPES.Literal && node.value === value;
142
+
143
+
144
+
145
+ const pairIdentifierName = (
146
+
147
+ typeofCheck,
148
+
149
+ nullCheck) => {
150
+ const identifierName = getTypeofObjectIdentifierName(skipTypeWrappers(typeofCheck));
151
+ return identifierName !== undefined &&
152
+ identifierName ===
153
+ getNonNullCheckIdentifierName(skipTypeWrappers(nullCheck))
154
+ ? identifierName
155
+ : undefined;
156
+ };
157
+
158
+
159
+
160
+
161
+
162
+
163
+ const findNonNullObjectPairs = (
164
+
165
+ sourceCode,
166
+
167
+ node) => {
168
+ const operands = chainOperands(sourceCode, node);
169
+ const pairsFrom = (index) => {
170
+ const first = operands[index];
171
+ const second = operands[index + 1];
172
+ if (first === undefined || second === undefined) {
173
+ return [];
174
+ }
175
+ const identifierName = pairIdentifierName(first, second) ?? pairIdentifierName(second, first);
176
+ return identifierName === undefined
177
+ ? pairsFrom(index + 1)
178
+ : [
179
+ {
180
+ range: [
181
+ getRangeWithParens(sourceCode, first)[0],
182
+ getRangeWithParens(sourceCode, second)[1],
183
+ ],
184
+ identifierName,
185
+ },
186
+ ...pairsFrom(index + 2),
187
+ ];
188
+ };
189
+ return pairsFrom(0);
190
+ };
191
191
  //# sourceMappingURL=prefer-is-non-null-object.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-is-non-null-object.mjs","sourceRoot":"","sources":["../../src/rules/prefer-is-non-null-object.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prefer-is-non-null-object.mjs","sourceRoot":"","sources":["../../src/rules/prefer-is-non-null-object.mts"],"names":[],"mappings":"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"}
@@ -12,20 +12,23 @@ export type SafeParseRuleConfig = Readonly<{
12
12
  method: string;
13
13
  }>;
14
14
  /**
15
- * Builds a rule that replaces the base-10 forms of `parseInt` and
16
- * `Number.parseInt` — `parseInt(x)` and `parseInt(x, 10)` — with
17
- * `Result.unwrapOkOr(<namespace>.<method>(x), Number.NaN)`.
15
+ * Builds a rule that reports the base-10 forms of `parseInt` and
16
+ * `Number.parseInt` — `parseInt(x)` and `parseInt(x, 10)` — and suggests
17
+ * `Result.unwrapOkOr(<namespace>.<method>(x), Number.NaN)` instead. A
18
+ * suggestion, not an autofix: the replacement reads some strings differently.
18
19
  *
19
20
  * A call that passes another radix is left alone: the replacement takes none,
20
21
  * so it would mean something the replacement cannot say.
21
22
  */
22
- export declare const createPreferSafeParseInt: (config: SafeParseRuleConfig) => TSESLint.RuleModule<'useSafeParseInt', readonly []>;
23
+ export declare const createPreferSafeParseInt: (config: SafeParseRuleConfig) => TSESLint.RuleModule<'useSafeParseInt' | 'replaceWithSafeParse', readonly []>;
23
24
  /**
24
- * Builds a rule that replaces `parseFloat(x)`, `Number.parseFloat(x)` and
25
- * `Number(x)` with `Result.unwrapOkOr(<namespace>.<method>(x), Number.NaN)`.
25
+ * Builds a rule that reports `parseFloat(x)`, `Number.parseFloat(x)` and
26
+ * `Number(x)`, and suggests
27
+ * `Result.unwrapOkOr(<namespace>.<method>(x), Number.NaN)` instead, as a
28
+ * suggestion for the same reason.
26
29
  *
27
30
  * Like every rewrite here, `Number(x)` is only flagged when `x` is purely a
28
31
  * `string`, which leaves `Number(someBoolean)` and `Number(someNumber)` alone.
29
32
  */
30
- export declare const createPreferSafeParseFloat: (config: SafeParseRuleConfig) => TSESLint.RuleModule<'useSafeParseFloat', readonly []>;
33
+ export declare const createPreferSafeParseFloat: (config: SafeParseRuleConfig) => TSESLint.RuleModule<'useSafeParseFloat' | 'replaceWithSafeParse', readonly []>;
31
34
  //# sourceMappingURL=prefer-safe-parse.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-safe-parse.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-safe-parse.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAYlC,yEAAyE;AACzE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IAEnB,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,WAC3B,mBAAmB,KAC1B,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,SAAS,EAAE,CAsBjD,CAAC;AAEL;;;;;;GAMG;AACH,eAAO,MAAM,0BAA0B,WAC7B,mBAAmB,KAC1B,QAAQ,CAAC,UAAU,CAAC,mBAAmB,EAAE,SAAS,EAAE,CAUnD,CAAC"}
1
+ {"version":3,"file":"prefer-safe-parse.d.mts","sourceRoot":"","sources":["../../src/rules/prefer-safe-parse.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAYlC,yEAAyE;AACzE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,wDAAwD;IACxD,UAAU,EAAE,MAAM,CAAC;IAEnB,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,WAC3B,mBAAmB,KAC1B,QAAQ,CAAC,UAAU,CACpB,iBAAiB,GAAG,sBAAsB,EAC1C,SAAS,EAAE,CAuBT,CAAC;AAEL;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,WAC7B,mBAAmB,KAC1B,QAAQ,CAAC,UAAU,CACpB,mBAAmB,GAAG,sBAAsB,EAC5C,SAAS,EAAE,CAWT,CAAC"}
@@ -12,6 +12,7 @@ import { isIdentifierNamed, skipTypeWrappers, typeHoldsAtEveryLayer, } from '../
12
12
 
13
13
 
14
14
 
15
+
15
16
  export const createPreferSafeParseInt = (config) => createSafeParseRule(config, 'useSafeParseInt', {
16
17
  messages: { useSafeParseInt: messageText(config) },
17
18
  description: `Replace \`parseInt(x)\` or \`Number.parseInt(x, 10)\` with \`Result.unwrapOkOr(${config.namespace}.${config.method}(x), Number.NaN)\` from ${config.moduleName}.`,
@@ -34,6 +35,8 @@ export const createPreferSafeParseInt = (config) => createSafeParseRule(config,
34
35
 
35
36
 
36
37
 
38
+
39
+
37
40
  export const createPreferSafeParseFloat = (config) => createSafeParseRule(config, 'useSafeParseFloat', {
38
41
  messages: { useSafeParseFloat: messageText(config) },
39
42
  description: `Replace \`parseFloat(x)\`, \`Number.parseFloat(x)\`, or \`Number(x)\` (when x is a string) with \`Result.unwrapOkOr(${config.namespace}.${config.method}(x), Number.NaN)\` from ${config.moduleName}.`,
@@ -44,6 +47,16 @@ export const createPreferSafeParseFloat = (config) => createSafeParseRule(config
44
47
  isGlobalCall(callee, 'Number'),
45
48
  });
46
49
 
50
+
51
+
52
+
53
+
54
+
55
+ const isStringType = (type) => {
56
+ const parts = type.isUnion() ? type.types : [type];
57
+ return (parts.length > 0 &&
58
+ parts.every((t) => (t.flags & ts.TypeFlags.StringLike) !== 0));
59
+ };
47
60
  const createSafeParseRule = ({ moduleName, namespace, method }, messageId, { messages, description, isTarget, }) => {
48
61
 
49
62
  const requiredImports = [namespace, 'Result'].toSorted();
@@ -51,14 +64,17 @@ const createSafeParseRule = ({ moduleName, namespace, method }, messageId, { mes
51
64
  meta: {
52
65
  type: 'suggestion',
53
66
  docs: { description },
54
- fixable: 'code',
67
+ hasSuggestions: true,
55
68
  schema: [],
56
- messages,
69
+ messages: {
70
+ ...messages,
71
+ replaceWithSafeParse: `Replace with \`Result.unwrapOkOr(${namespace}.${method}({{argName}}), Number.NaN)\`.`,
72
+ },
57
73
  defaultOptions: [],
58
74
  },
59
75
  create: (context) => {
60
76
  const sourceCode = context.sourceCode;
61
- const mut_nodesToFix = [];
77
+ const mut_reports = [];
62
78
  return {
63
79
  CallExpression: (node) => {
64
80
  if (!isTarget(skipTypeWrappers(node.callee), node.arguments)) {
@@ -66,7 +82,6 @@ const createSafeParseRule = ({ moduleName, namespace, method }, messageId, { mes
66
82
  }
67
83
  const firstArg = node.arguments[0];
68
84
 
69
-
70
85
  if (firstArg === undefined ||
71
86
  firstArg.type === AST_NODE_TYPES.SpreadElement) {
72
87
  return;
@@ -81,7 +96,7 @@ const createSafeParseRule = ({ moduleName, namespace, method }, messageId, { mes
81
96
  if (!typeHoldsAtEveryLayer(sourceCode, firstArg, isStringType)) {
82
97
  return;
83
98
  }
84
- mut_nodesToFix.push({ node, argExpression: firstArg });
99
+ mut_reports.push({ node, argExpression: firstArg });
85
100
  },
86
101
  'Program:exit': () => {
87
102
  const binding = bindValueImports(sourceCode, moduleName, requiredImports);
@@ -90,23 +105,33 @@ const createSafeParseRule = ({ moduleName, namespace, method }, messageId, { mes
90
105
  const resultName = localNameOf('Result');
91
106
 
92
107
 
93
- for (const { node, argExpression } of mut_nodesToFix) {
108
+
109
+
110
+
111
+ for (const { node, argExpression } of mut_reports) {
94
112
  const argText = getArgumentText(sourceCode, argExpression);
113
+ const data = {
114
+ original: sourceCode.getText(node),
115
+ argName: argText,
116
+ };
95
117
  context.report({
96
118
  node,
97
119
  messageId,
98
- data: {
99
- original: sourceCode.getText(node),
100
- argName: argText,
101
- },
102
- fix: binding === undefined ||
120
+ data,
121
+ suggest: binding === undefined ||
103
122
  namespaceName === undefined ||
104
123
  resultName === undefined ||
105
124
  [namespaceName, resultName].some((name) => hasForeignBinding(sourceCode, node, name, moduleName))
106
- ? null
107
- : (fixer) => [
108
- ...binding.edits(fixer),
109
- fixer.replaceText(node, `${resultName}.unwrapOkOr(${namespaceName}.${method}(${argText}), Number.NaN)`),
125
+ ? []
126
+ : [
127
+ {
128
+ messageId: 'replaceWithSafeParse',
129
+ data,
130
+ fix: (fixer) => [
131
+ ...binding.edits(fixer),
132
+ fixer.replaceText(node, `${resultName}.unwrapOkOr(${namespaceName}.${method}(${argText}), Number.NaN)`),
133
+ ],
134
+ },
110
135
  ],
111
136
  });
112
137
  }
@@ -115,7 +140,7 @@ const createSafeParseRule = ({ moduleName, namespace, method }, messageId, { mes
115
140
  },
116
141
  };
117
142
  };
118
- const messageText = ({ moduleName, namespace, method, }) => `Replace \`{{original}}\` with \`Result.unwrapOkOr(${namespace}.${method}({{argName}}), Number.NaN)\` from ${moduleName}.`;
143
+ const messageText = ({ moduleName, namespace, method, }) => `Replace \`{{original}}\` with \`Result.unwrapOkOr(${namespace}.${method}({{argName}}), Number.NaN)\` from ${moduleName}. It parses some strings differently from the call it replaces, so check the input before applying it.`;
119
144
 
120
145
  const isGlobalCall = (callee, name) => callee.type === AST_NODE_TYPES.Identifier && callee.name === name;
121
146
 
@@ -127,14 +152,4 @@ const isNumberMethod = (callee, name) => callee.type === AST_NODE_TYPES.MemberEx
127
152
  isIdentifierNamed(callee.object, 'Number') &&
128
153
  callee.property.type === AST_NODE_TYPES.Identifier &&
129
154
  callee.property.name === name;
130
-
131
-
132
-
133
-
134
-
135
- const isStringType = (type) => {
136
- const parts = type.isUnion() ? type.types : [type];
137
- return (parts.length > 0 &&
138
- parts.every((t) => (t.flags & ts.TypeFlags.StringLike) !== 0));
139
- };
140
155
  //# sourceMappingURL=prefer-safe-parse.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-safe-parse.mjs","sourceRoot":"","sources":["../../src/rules/prefer-safe-parse.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prefer-safe-parse.mjs","sourceRoot":"","sources":["../../src/rules/prefer-safe-parse.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type TSESTree } from '@typescript-eslint/utils';
2
+ import type { DeepReadonly } from 'ts-type-forge';
3
+ /**
4
+ * The statement next to `node` (`offset` 1) or before it (-1) in the statement
5
+ * list `node` is one of: the program's, a block's, a class static block's, a
6
+ * namespace's or a `case`'s. What an `export` declares (or, for
7
+ * `export default`, the expression it exports) is read as the `export`
8
+ * statement. `undefined` when there is none, or when `node` is not in a
9
+ * statement list (an arrow function's expression body, a `for` initializer).
10
+ */
11
+ export declare const siblingOf: (node: DeepReadonly<TSESTree.Node>, offset: 1 | -1) => DeepReadonly<TSESTree.Node> | undefined;
12
+ //# sourceMappingURL=statements.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statements.d.mts","sourceRoot":"","sources":["../src/statements.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,SACd,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,UACzB,CAAC,GAAG,CAAC,CAAC,KACb,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAmBhC,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+ export const siblingOf = (node, offset) => {
11
+ const { parent } = node;
12
+ const statement = (parent?.type === AST_NODE_TYPES.ExportNamedDeclaration ||
13
+ parent?.type === AST_NODE_TYPES.ExportDefaultDeclaration) &&
14
+ parent.declaration === node
15
+ ? parent
16
+ : node;
17
+ const list = statementListOf(statement);
18
+ if (list === undefined) {
19
+ return undefined;
20
+ }
21
+ const index = list.indexOf(statement);
22
+ return index === -1 ? undefined : list[index + offset];
23
+ };
24
+ const statementListOf = (node) => {
25
+ const { parent } = node;
26
+ if (parent === undefined) {
27
+ return undefined;
28
+ }
29
+ if (parent.type === AST_NODE_TYPES.Program ||
30
+ parent.type === AST_NODE_TYPES.BlockStatement ||
31
+ parent.type === AST_NODE_TYPES.StaticBlock ||
32
+ parent.type === AST_NODE_TYPES.TSModuleBlock) {
33
+ return parent.body;
34
+ }
35
+ return parent.type === AST_NODE_TYPES.SwitchCase
36
+ ? parent.consequent
37
+ : undefined;
38
+ };
39
+ //# sourceMappingURL=statements.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statements.mjs","sourceRoot":"","sources":["../src/statements.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,0BAA0B,CAAC;AAGzE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,IAAiC,EACjC,MAAc,EAC2B,EAAE;IAC3C,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAExB,MAAM,SAAS,GACb,CAAC,MAAM,EAAE,IAAI,KAAK,cAAc,CAAC,sBAAsB;QACrD,MAAM,EAAE,IAAI,KAAK,cAAc,CAAC,wBAAwB,CAAC;QAC3D,MAAM,CAAC,WAAW,KAAK,IAAI;QACzB,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,IAAI,CAAC;IAEX,MAAM,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAExC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEtC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,IAAiC,EACmB,EAAE;IACtD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAExB,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IACE,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,OAAO;QACtC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,cAAc;QAC7C,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,WAAW;QAC1C,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa,EAC5C,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,UAAU;QAC9C,CAAC,CAAC,MAAM,CAAC,UAAU;QACnB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC,CAAC"}
@@ -51,9 +51,9 @@ export declare const isIdentifierNamed: (node: DeepReadonly<TSESTree.Node>, name
51
51
  * Whether `holds` is true of the type of every layer of type wrappers around
52
52
  * `node` (see {@link typeWrapperLayers}), outermost to innermost; `false`
53
53
  * without type information. A widening cast (`s as string | number`) is the
54
- * author saying the value may be more than it is, and is respected; a
55
- * narrowing one (`s!`, `v as unknown as string`) cannot vouch for what the
56
- * value's own type does not, and the fix, which keeps the wrapper, has to
54
+ * author saying the value may be more than it is, and is respected; a narrowing
55
+ * one (`s!`, `v as unknown as string`) cannot vouch for what the value's own
56
+ * type does not, and the fix, which keeps the wrapper, has to
57
57
  * type-check at every layer too.
58
58
  */
59
59
  export declare const typeHoldsAtEveryLayer: (sourceCode: TSESLint.SourceCode, node: TSESTree.Node, holds: (type: ts.Type, typeChecker: ts.TypeChecker) => boolean) => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eslint-rule-forge",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "private": false,
5
5
  "description": "Helpers for writing typescript-eslint rules that see through type wrappers and parentheses, and resolve what a file imports.",
6
6
  "keywords": [
@@ -41,13 +41,13 @@
41
41
  "@typescript-eslint/rule-tester": "8.72.0",
42
42
  "dedent": "1.7.2",
43
43
  "eslint": "10.13.0",
44
- "eslint-config-typed": "7.1.0",
45
- "eslint-plugin-ts-fortress": "1.3.10",
46
- "eslint-plugin-ts-type-forge": "0.8.15",
44
+ "eslint-config-typed": "7.3.0",
45
+ "eslint-plugin-ts-fortress": "1.3.12",
46
+ "eslint-plugin-ts-type-forge": "0.8.17",
47
47
  "prettier": "3.9.10",
48
48
  "prettier-plugin-organize-imports": "4.3.0",
49
49
  "prettier-plugin-packagejson": "3.0.2",
50
- "ts-data-forge": "14.10.0",
50
+ "ts-data-forge": "14.10.1",
51
51
  "ts-repo-utils": "10.7.1"
52
52
  },
53
53
  "peerDependencies": {
package/src/bindings.mts CHANGED
@@ -8,8 +8,8 @@ import {
8
8
  /* eslint-disable @typescript-eslint/prefer-readonly-parameter-types */
9
9
 
10
10
  /**
11
- * Whether `name`, read at `node`, resolves to something this file writes down
12
- * — a declaration, a parameter, an import — rather than to a global or a
11
+ * Whether `name`, read at `node`, resolves to something this file writes down —
12
+ * a declaration, a parameter, an import — rather than to a global or a
13
13
  * standard-library type of the same name.
14
14
  *
15
15
  * The scope manager makes an implicit variable for every reference it cannot
@@ -29,9 +29,8 @@ export const isLocallyBound = (
29
29
  /**
30
30
  * Whether `name`, read at `node`, resolves to a binding that is not an import
31
31
  * from `moduleName` — a declaration, a parameter, or an import from another
32
- * module. A fix that makes code at `node` refer to `moduleName`'s export
33
- * `name` has to give up then, because the name would refer to that binding
34
- * instead.
32
+ * module. A fix that makes code at `node` refer to `moduleName`'s export `name`
33
+ * has to give up then, because the name would refer to that binding instead.
35
34
  *
36
35
  * The innermost binding decides: an import from `moduleName` at the top of the
37
36
  * file does not help a name a function shadows around `node`.