@ttsc/lint 0.18.0 → 0.18.2

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.
package/lib/index.js CHANGED
@@ -200,14 +200,34 @@ function readConfigFileOption(context) {
200
200
  return value;
201
201
  }
202
202
  function findLintConfigFile(context) {
203
- // Mirror the Go-side discovery loop: walk from the tsconfig directory
204
- // upward, returning the first directory that has exactly one of the
205
- // candidate filenames. Multiple files in the same directory is treated
206
- // as ambiguous and skipped (the Go side raises a hard error on the
207
- // duplicate; here we leave it to the binary's own discovery to surface
208
- // the issue once with one canonical message).
203
+ // Mirror the Go-side discovery origins: walk upward from the tsconfig
204
+ // directory first, then fall back to the working directory. The fallback
205
+ // covers callers that point at an out-of-tree tsconfig (e.g. a
206
+ // TtscCompiler invocation whose wrapper tsconfig lives in the system temp
207
+ // dir while cwd/projectRoot is the real project) without it the walk
208
+ // dead-ends in the temp dir's ancestry and the project's config (and its
209
+ // contributor plugins) are silently missed.
210
+ const tsconfigDir = tsconfigBaseDir(context);
211
+ const cwd = node_path_1.default.resolve(context.cwd ?? context.projectRoot);
212
+ for (const origin of tsconfigDir === cwd
213
+ ? [tsconfigDir]
214
+ : [tsconfigDir, cwd]) {
215
+ const discovered = findLintConfigFileFrom(origin);
216
+ if (discovered !== undefined) {
217
+ return discovered;
218
+ }
219
+ }
220
+ return undefined;
221
+ }
222
+ function findLintConfigFileFrom(origin) {
223
+ // Mirror the Go-side discovery loop: walk from `origin` upward, returning
224
+ // the first directory that has exactly one of the candidate filenames.
225
+ // Multiple files in the same directory is treated as ambiguous and skipped
226
+ // (the Go side raises a hard error on the duplicate; here we leave it to
227
+ // the binary's own discovery to surface the issue once with one canonical
228
+ // message).
209
229
  const candidateSet = new Set(LINT_CONFIG_FILENAMES);
210
- let dir = tsconfigBaseDir(context);
230
+ let dir = origin;
211
231
  while (true) {
212
232
  // One `readdirSync` per directory level beats 14 `existsSync`+
213
233
  // `statSync` pairs (= 28 stat syscalls) per level; intersect the
@@ -308,6 +328,14 @@ function readCjsConfigPlugins(configPath) {
308
328
  // serialise arbitrary in-memory plugin objects across the process boundary.
309
329
  // The URL lives in a variable so tsgo does not statically resolve it.
310
330
  const TTSX_EXTRACTOR_SCRIPT = `const configUrl = %CONFIG_IMPORT%;
331
+ const CONFIG_KEYS = new Set<string>([
332
+ "files",
333
+ "ignores",
334
+ "extends",
335
+ "plugins",
336
+ "rules",
337
+ "format",
338
+ ]);
311
339
  const importedConfig = await import(configUrl);
312
340
 
313
341
  declare const process: {
@@ -318,17 +346,7 @@ declare const process: {
318
346
  };
319
347
 
320
348
  try {
321
- let current: unknown = importedConfig;
322
- for (let i = 0; i < 8; i++) {
323
- if (isObject(current) && hasOwn(current, "default")) {
324
- current = (current as Record<string, unknown>).default;
325
- continue;
326
- }
327
- break;
328
- }
329
- if (typeof current === "function") {
330
- current = await (current as () => unknown | Promise<unknown>)();
331
- }
349
+ const current = await resolveConfig(importedConfig, true);
332
350
  const pluginMaps = collectPluginObjects(current);
333
351
  const entries: Array<{ namespace: string; source: string }> = [];
334
352
  for (const map of pluginMaps) {
@@ -352,6 +370,71 @@ function hasOwn(value: Record<string, unknown>, key: string): boolean {
352
370
  return Object.prototype.hasOwnProperty.call(value, key);
353
371
  }
354
372
 
373
+ async function resolveConfig(value: unknown, allowNamedConfig: boolean): Promise<unknown> {
374
+ let current = value;
375
+ for (let i = 0; i < 8; i++) {
376
+ if (typeof current === "function") {
377
+ current = await (current as () => unknown | Promise<unknown>)();
378
+ allowNamedConfig = false;
379
+ continue;
380
+ }
381
+ if (isObject(current) && !Array.isArray(current)) {
382
+ if (hasOwn(current, "default")) {
383
+ const defaultValue = current.default;
384
+ if (isModuleNamespace(current) || !hasConfigKey(current)) {
385
+ current = defaultValue;
386
+ allowNamedConfig = false;
387
+ continue;
388
+ }
389
+ const normalizedDefault = await resolveConfig(defaultValue, false);
390
+ if (isObject(normalizedDefault) && !Array.isArray(normalizedDefault)) {
391
+ current = mergeConfigObjects(normalizedDefault, current);
392
+ allowNamedConfig = false;
393
+ continue;
394
+ }
395
+ }
396
+ if (allowNamedConfig && hasOwn(current, "config")) {
397
+ current = current.config;
398
+ allowNamedConfig = false;
399
+ continue;
400
+ }
401
+ }
402
+ break;
403
+ }
404
+ return current;
405
+ }
406
+
407
+ function isModuleNamespace(value: Record<string, unknown>): boolean {
408
+ return Object.prototype.toString.call(value) === "[object Module]";
409
+ }
410
+
411
+ function hasConfigKey(value: Record<string, unknown>): boolean {
412
+ for (const key of CONFIG_KEYS) {
413
+ if (hasOwn(value, key)) {
414
+ return true;
415
+ }
416
+ }
417
+ return false;
418
+ }
419
+
420
+ function mergeConfigObjects(
421
+ base: Record<string, unknown>,
422
+ override: Record<string, unknown>,
423
+ ): Record<string, unknown> {
424
+ const out: Record<string, unknown> = {};
425
+ for (const key of CONFIG_KEYS) {
426
+ if (hasOwn(base, key)) {
427
+ out[key] = base[key];
428
+ }
429
+ }
430
+ for (const key of CONFIG_KEYS) {
431
+ if (hasOwn(override, key)) {
432
+ out[key] = override[key];
433
+ }
434
+ }
435
+ return out;
436
+ }
437
+
355
438
  function collectPluginObjects(value: unknown): Array<Record<string, unknown>> {
356
439
  const out: Array<Record<string, unknown>> = [];
357
440
  visit(value);
@@ -554,7 +637,7 @@ function evaluateTtsxConfigPlugins(configPath, _context) {
554
637
  * Namespaces the on-disk config cache. Kept in lockstep with the Go sidecar's
555
638
  * `configCacheVersion`; bump both when the cached shape changes.
556
639
  */
557
- const CONFIG_CACHE_VERSION = "v1";
640
+ const CONFIG_CACHE_VERSION = "v2";
558
641
  /**
559
642
  * Directory shared by this factory and the Go sidecar for cached lint configs.
560
643
  * The two write different files (the `kind` segment of the cache key keeps
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,14 @@ import type { ITtscLintRules } from "./rules/ITtscLintRules";
10
10
  export interface ITtscLintConfig {
11
11
  /** Globs that select the files this entry applies to. */
12
12
  files?: string | readonly string[];
13
- /** Globs that exclude files this entry would otherwise match. */
13
+ /**
14
+ * Globs that exclude files from linting.
15
+ *
16
+ * When `files` is also set, the ignores only refine that selection (the
17
+ * entry's rules skip the matched files). Without `files`, the ignores are
18
+ * global: the matched files are excluded from every rule in the resolved
19
+ * config, including rules inherited through `extends`.
20
+ */
14
21
  ignores?: string | readonly string[];
15
22
  /**
16
23
  * Config file path folded in before this object's own rules apply.
@@ -567,6 +567,24 @@ func collectConfigObject(store *ConfigStore, raw any, baseDir, path string, chai
567
567
  return err
568
568
  }
569
569
 
570
+ // An `ignores` list without a `files` filter is a GLOBAL ignore: a config
571
+ // file is a single ITtscLintConfig object, so its top-level `ignores` is
572
+ // the only way an author can say "never lint these files". It must
573
+ // therefore exclude the matched files from every entry of the resolved
574
+ // chain — including entries folded in via `extends`, which otherwise
575
+ // carry no ignores of their own and would keep linting the excluded
576
+ // files (samchon/ttsc: `extends` + `ignores` + `rules` leaked the base
577
+ // config's rules onto ignored paths). When `files` IS present the
578
+ // ignores only refine that entry's selection, matching ESLint's
579
+ // entry-scoped semantics, and no global entry is added.
580
+ if len(files) == 0 && len(ignores) > 0 {
581
+ store.entries = append(store.entries, ConfigEntry{
582
+ BaseDir: baseDir,
583
+ Ignores: ignores,
584
+ IgnoreOnly: true,
585
+ })
586
+ }
587
+
570
588
  rulesValue, hasRules := obj["rules"]
571
589
  formatValue, hasFormat := obj["format"]
572
590
  if hasRules || hasFormat {
@@ -619,15 +637,6 @@ func collectConfigObject(store *ConfigStore, raw any, baseDir, path string, chai
619
637
  Rules: parsed,
620
638
  })
621
639
  }
622
- return nil
623
- }
624
-
625
- if len(files) == 0 && len(ignores) > 0 {
626
- store.entries = append(store.entries, ConfigEntry{
627
- BaseDir: baseDir,
628
- Ignores: ignores,
629
- IgnoreOnly: true,
630
- })
631
640
  }
632
641
  return nil
633
642
  }
@@ -774,7 +783,11 @@ func LoadConfigResolver(entry *PluginEntry, cwd, tsconfigPath string) (RuleResol
774
783
  return nil, err
775
784
  }
776
785
  if discovered == "" {
777
- return nil, fmt.Errorf("%w (searched upward from %s); create one or set \"configFile\" on the tsconfig plugin entry", errNoLintConfigFile, cwd)
786
+ return nil, fmt.Errorf(
787
+ "%w (searched upward from %s); create one or set \"configFile\" on the tsconfig plugin entry",
788
+ errNoLintConfigFile,
789
+ strings.Join(discoveryConfigBaseDirs(cwd, tsconfigPath), ", then from "),
790
+ )
778
791
  }
779
792
  return loadConfigResolver(discovered)
780
793
  }
@@ -794,7 +807,23 @@ func loadConfigResolver(location string) (RuleResolver, error) {
794
807
  }
795
808
 
796
809
  func findLintConfigFile(cwd, tsconfigPath string) (string, error) {
797
- dir := discoveryConfigBaseDir(cwd, tsconfigPath)
810
+ for _, origin := range discoveryConfigBaseDirs(cwd, tsconfigPath) {
811
+ discovered, err := findLintConfigFileFrom(origin)
812
+ if err != nil {
813
+ return "", err
814
+ }
815
+ if discovered != "" {
816
+ return discovered, nil
817
+ }
818
+ }
819
+ return "", nil
820
+ }
821
+
822
+ // findLintConfigFileFrom walks upward from `dir` and returns the first
823
+ // directory level holding exactly one lint config file. Two or more candidates
824
+ // in the same directory is ambiguous and a hard error; an exhausted walk
825
+ // returns "" so the caller can try the next discovery origin.
826
+ func findLintConfigFileFrom(dir string) (string, error) {
798
827
  for {
799
828
  matches := make([]string, 0, 1)
800
829
  for _, name := range []string{
@@ -846,19 +875,43 @@ func resolveConfigFilePath(configPath, cwd, tsconfigPath string) string {
846
875
  return filepath.Join(tsconfigBaseDir(cwd, tsconfigPath), configPath)
847
876
  }
848
877
 
849
- // discoveryConfigBaseDir returns the directory from which auto-discovery walks
850
- // upward when no explicit config path is provided. Prefer the tsconfig
851
- // directory over cwd so that nested package configs are found relative to the
852
- // tsconfig that triggered the lint run.
853
- func discoveryConfigBaseDir(cwd, tsconfigPath string) string {
878
+ // discoveryConfigBaseDirs returns the ordered directories from which
879
+ // auto-discovery walks upward when no explicit config path is provided. The
880
+ // tsconfig directory comes first so that nested package configs are found
881
+ // relative to the tsconfig that triggered the lint run; the working directory
882
+ // follows as a fallback so a caller that points at an out-of-tree tsconfig
883
+ // (e.g. a TtscCompiler invocation whose wrapper tsconfig lives in the system
884
+ // temp dir but whose cwd/projectRoot is the real project) still discovers the
885
+ // project's lint config instead of failing on the temp dir's empty ancestry.
886
+ func discoveryConfigBaseDirs(cwd, tsconfigPath string) []string {
887
+ origins := make([]string, 0, 2)
854
888
  if tsconfigPath != "" {
855
889
  resolvedTsconfig := tsconfigPath
856
890
  if !filepath.IsAbs(resolvedTsconfig) {
857
891
  resolvedTsconfig = filepath.Join(cwd, resolvedTsconfig)
858
892
  }
859
- return filepath.Dir(resolvedTsconfig)
893
+ origins = append(origins, filepath.Dir(resolvedTsconfig))
894
+ }
895
+ if cwd != "" && !containsPath(origins, cwd) {
896
+ origins = append(origins, filepath.Clean(cwd))
860
897
  }
861
- return cwd
898
+ return origins
899
+ }
900
+
901
+ // containsPath reports whether `paths` already holds `candidate` after
902
+ // cleaning, comparing case-insensitively on Windows (where two spellings of
903
+ // the same directory differ only by drive-letter or path case).
904
+ func containsPath(paths []string, candidate string) bool {
905
+ cleaned := filepath.Clean(candidate)
906
+ for _, existing := range paths {
907
+ if existing == cleaned {
908
+ return true
909
+ }
910
+ if runtime.GOOS == "windows" && strings.EqualFold(existing, cleaned) {
911
+ return true
912
+ }
913
+ }
914
+ return false
862
915
  }
863
916
 
864
917
  // tsconfigBaseDir returns the directory that contains the tsconfig file, or
@@ -898,7 +951,7 @@ func loadConfigFile(location string) (any, error) {
898
951
  // configCacheVersion namespaces the on-disk config cache. Bump it whenever
899
952
  // the shape of a cached config object changes so that entries written by an
900
953
  // older @ttsc/lint binary are treated as a miss rather than silently reused.
901
- const configCacheVersion = "v1"
954
+ const configCacheVersion = "v2"
902
955
 
903
956
  // configEvalCache memoizes evaluated .ts/.js lint config objects for the
904
957
  // lifetime of one process; the on-disk cache (configCacheDir) extends the
@@ -1115,35 +1168,18 @@ func runConfigLoaderCommand(ctx context.Context, cmd *exec.Cmd, location, label
1115
1168
 
1116
1169
  // loadScriptConfigFile evaluates a .js/.cjs/.mjs config file by running a
1117
1170
  // Node subprocess that dynamic-imports the file, resolves the exported config
1118
- // through the same 8-hop default/config unwrap used by the TS loader, and
1171
+ // through the same 8-hop default/config normalization used by the TS loader, and
1119
1172
  // serializes the result as JSON to stdout. The subprocess has a
1120
1173
  // configLoaderTimeout deadline to prevent user code from hanging indefinitely.
1121
1174
  func loadScriptConfigFile(location string) (any, error) {
1122
1175
  script := fmt.Sprintf(`
1123
1176
  const { pathToFileURL } = require("node:url");
1124
1177
 
1178
+ const CONFIG_KEYS = new Set([%s]);
1179
+
1125
1180
  (async () => {
1126
1181
  const mod = await import(pathToFileURL(process.argv[1]).href);
1127
- let current = mod;
1128
- let allowNamedConfig = true;
1129
- // Match the 8-hop walk used by the TypeScript loader at
1130
- // `+"`"+`typeScriptConfigLoaderSource`+"`"+` so doubly-wrapped CJS/ESM
1131
- // interop (e.g. `+"`"+`{default:{default:config}}`+"`"+`) is resolved
1132
- // consistently across .js/.cjs/.mjs and .ts/.cts/.mts loaders.
1133
- for (let i = 0; i < 8; i++) {
1134
- if (current !== null && typeof current === "object" && Object.prototype.hasOwnProperty.call(current, "default")) {
1135
- current = current.default;
1136
- allowNamedConfig = false;
1137
- continue;
1138
- }
1139
- if (allowNamedConfig && current !== null && typeof current === "object" && Object.prototype.hasOwnProperty.call(current, "config")) {
1140
- current = current.config;
1141
- allowNamedConfig = false;
1142
- continue;
1143
- }
1144
- break;
1145
- }
1146
- const value = typeof current === "function" ? await current() : current;
1182
+ const value = await resolveConfig(mod, true);
1147
1183
  if (value === null || typeof value !== "object" || Array.isArray(value)) {
1148
1184
  throw new Error("config file must export an ITtscLintConfig object");
1149
1185
  }
@@ -1153,13 +1189,70 @@ const { pathToFileURL } = require("node:url");
1153
1189
  process.exit(1);
1154
1190
  });
1155
1191
 
1192
+ async function resolveConfig(value, allowNamedConfig) {
1193
+ let current = value;
1194
+ for (let i = 0; i < 8; i++) {
1195
+ if (typeof current === "function") {
1196
+ current = await current();
1197
+ allowNamedConfig = false;
1198
+ continue;
1199
+ }
1200
+ if (current !== null && typeof current === "object" && !Array.isArray(current)) {
1201
+ if (Object.prototype.hasOwnProperty.call(current, "default")) {
1202
+ const defaultValue = current.default;
1203
+ if (isModuleNamespace(current) || !hasConfigKey(current)) {
1204
+ current = defaultValue;
1205
+ allowNamedConfig = false;
1206
+ continue;
1207
+ }
1208
+ const normalizedDefault = await resolveConfig(defaultValue, false);
1209
+ if (normalizedDefault !== null && typeof normalizedDefault === "object" && !Array.isArray(normalizedDefault)) {
1210
+ current = mergeConfigObjects(normalizedDefault, current);
1211
+ allowNamedConfig = false;
1212
+ continue;
1213
+ }
1214
+ }
1215
+ if (allowNamedConfig && Object.prototype.hasOwnProperty.call(current, "config")) {
1216
+ current = current.config;
1217
+ allowNamedConfig = false;
1218
+ continue;
1219
+ }
1220
+ }
1221
+ break;
1222
+ }
1223
+ return current;
1224
+ }
1225
+
1226
+ function isModuleNamespace(value) {
1227
+ return Object.prototype.toString.call(value) === "[object Module]";
1228
+ }
1229
+
1230
+ function hasConfigKey(value) {
1231
+ for (const key of CONFIG_KEYS) {
1232
+ if (Object.prototype.hasOwnProperty.call(value, key)) {
1233
+ return true;
1234
+ }
1235
+ }
1236
+ return false;
1237
+ }
1238
+
1239
+ function mergeConfigObjects(base, override) {
1240
+ const out = toSerializableConfig(base);
1241
+ for (const key of CONFIG_KEYS) {
1242
+ if (Object.prototype.hasOwnProperty.call(override, key)) {
1243
+ out[key] = override[key];
1244
+ }
1245
+ }
1246
+ return out;
1247
+ }
1248
+
1156
1249
  // toSerializableConfig copies every ITtscLintConfig key onto a plain object so
1157
1250
  // it survives the JSON round trip to the Go sidecar. Every key is copied
1158
1251
  // verbatim — files, ignores, extends, plugins, rules, AND format — so a config
1159
1252
  // whose only key is `+"`"+`format`+"`"+` is not silently dropped.
1160
1253
  function toSerializableConfig(value) {
1161
1254
  const out = {};
1162
- for (const key of [%s]) {
1255
+ for (const key of CONFIG_KEYS) {
1163
1256
  if (Object.prototype.hasOwnProperty.call(value, key)) {
1164
1257
  out[key] = value[key];
1165
1258
  }
@@ -1181,7 +1274,7 @@ function toSerializableConfig(value) {
1181
1274
  // an ephemeral loader script and tsconfig into a temp directory, symlinking the
1182
1275
  // nearest node_modules, then running `ttsx` with a configLoaderTimeout deadline.
1183
1276
  // The loader script imports the config file, resolves it through the same
1184
- // unwrap chain used by loadScriptConfigFile, and writes JSON to stdout.
1277
+ // normalization chain used by loadScriptConfigFile, and writes JSON to stdout.
1185
1278
  func loadTypeScriptConfigFile(location string) (any, error) {
1186
1279
  tempDir, err := os.MkdirTemp(loaderTempBase(location, os.TempDir()), "ttsc-lint-config-")
1187
1280
  if err != nil {
@@ -1291,6 +1384,7 @@ func uncFileURL(pathname string) string {
1291
1384
  // statically resolve the file URL during the loader build.
1292
1385
  func typeScriptConfigLoaderSource(importLiteral string) string {
1293
1386
  return fmt.Sprintf(`const configUrl = %s;
1387
+ const CONFIG_KEYS = new Set<string>([%s]);
1294
1388
  const importedConfig = await import(configUrl);
1295
1389
 
1296
1390
  declare const process: {
@@ -1313,21 +1407,34 @@ try {
1313
1407
  async function resolveConfig(value: unknown, allowNamedConfig: boolean): Promise<unknown> {
1314
1408
  let current = value;
1315
1409
  for (let i = 0; i < 8; i++) {
1316
- if (isObject(current) && hasOwn(current, "default")) {
1317
- current = current.default;
1410
+ if (typeof current === "function") {
1411
+ current = await (current as () => unknown | Promise<unknown>)();
1318
1412
  allowNamedConfig = false;
1319
1413
  continue;
1320
1414
  }
1321
- if (allowNamedConfig && isObject(current) && hasOwn(current, "config")) {
1322
- current = current.config;
1323
- allowNamedConfig = false;
1324
- continue;
1415
+ if (isObject(current) && !Array.isArray(current)) {
1416
+ if (hasOwn(current, "default")) {
1417
+ const defaultValue = current.default;
1418
+ if (isModuleNamespace(current) || !hasConfigKey(current)) {
1419
+ current = defaultValue;
1420
+ allowNamedConfig = false;
1421
+ continue;
1422
+ }
1423
+ const normalizedDefault = await resolveConfig(defaultValue, false);
1424
+ if (isObject(normalizedDefault) && !Array.isArray(normalizedDefault)) {
1425
+ current = mergeConfigObjects(normalizedDefault, current);
1426
+ allowNamedConfig = false;
1427
+ continue;
1428
+ }
1429
+ }
1430
+ if (allowNamedConfig && hasOwn(current, "config")) {
1431
+ current = current.config;
1432
+ allowNamedConfig = false;
1433
+ continue;
1434
+ }
1325
1435
  }
1326
1436
  break;
1327
1437
  }
1328
- if (typeof current === "function") {
1329
- return await (current as () => unknown | Promise<unknown>)();
1330
- }
1331
1438
  return current;
1332
1439
  }
1333
1440
 
@@ -1339,13 +1446,39 @@ function hasOwn(value: Record<string, unknown>, key: string): boolean {
1339
1446
  return Object.prototype.hasOwnProperty.call(value, key);
1340
1447
  }
1341
1448
 
1449
+ function isModuleNamespace(value: Record<string, unknown>): boolean {
1450
+ return Object.prototype.toString.call(value) === "[object Module]";
1451
+ }
1452
+
1453
+ function hasConfigKey(value: Record<string, unknown>): boolean {
1454
+ for (const key of CONFIG_KEYS) {
1455
+ if (hasOwn(value, key)) {
1456
+ return true;
1457
+ }
1458
+ }
1459
+ return false;
1460
+ }
1461
+
1462
+ function mergeConfigObjects(
1463
+ base: Record<string, unknown>,
1464
+ override: Record<string, unknown>,
1465
+ ): Record<string, unknown> {
1466
+ const out = toSerializableConfig(base);
1467
+ for (const key of CONFIG_KEYS) {
1468
+ if (hasOwn(override, key)) {
1469
+ out[key] = override[key];
1470
+ }
1471
+ }
1472
+ return out;
1473
+ }
1474
+
1342
1475
  // toSerializableConfig copies every ITtscLintConfig key onto a plain object so
1343
1476
  // it survives the JSON round trip to the Go sidecar. Every key is copied
1344
1477
  // verbatim — files, ignores, extends, plugins, rules, AND format — so a config
1345
1478
  // whose only key is "format" is not silently dropped.
1346
1479
  function toSerializableConfig(value: Record<string, unknown>): Record<string, unknown> {
1347
1480
  const out: Record<string, unknown> = {};
1348
- for (const key of [%s]) {
1481
+ for (const key of CONFIG_KEYS) {
1349
1482
  if (hasOwn(value, key)) {
1350
1483
  out[key] = value[key];
1351
1484
  }
@@ -19,6 +19,14 @@ type jsxElementInfo struct {
19
19
  tag string
20
20
  attrs map[string]jsxAttr
21
21
  children *shimast.NodeList
22
+ // spread is true when the opening element carries at least one
23
+ // `{...props}` JsxSpreadAttribute. The spread's contents are unknown at
24
+ // lint time, so rules that report on the *absence* of an attribute must
25
+ // treat the element conservatively: the missing attribute could be
26
+ // provided by the spread, and `@ttsc/lint` findings are build-breaking
27
+ // compiler errors, so absence-predicated reports bail out instead of
28
+ // guessing. Reports about explicitly present attributes still fire.
29
+ spread bool
22
30
  }
23
31
 
24
32
  func jsxElementFromNode(node *shimast.Node) jsxElementInfo {
@@ -34,7 +42,7 @@ func jsxElementFromNode(node *shimast.Node) jsxElementInfo {
34
42
  }
35
43
  info.opening = el.OpeningElement.AsNode()
36
44
  info.tag = jsxTagName(el.OpeningElement.TagName())
37
- info.attrs = jsxAttrs(el.OpeningElement.Attributes())
45
+ info.attrs, info.spread = jsxAttrs(el.OpeningElement.Attributes())
38
46
  info.children = el.Children
39
47
  case shimast.KindJsxSelfClosingElement:
40
48
  el := node.AsJsxSelfClosingElement()
@@ -43,7 +51,7 @@ func jsxElementFromNode(node *shimast.Node) jsxElementInfo {
43
51
  }
44
52
  info.opening = node
45
53
  info.tag = jsxTagName(el.TagName)
46
- info.attrs = jsxAttrs(el.Attributes)
54
+ info.attrs, info.spread = jsxAttrs(el.Attributes)
47
55
  case shimast.KindJsxOpeningElement:
48
56
  el := node.AsJsxOpeningElement()
49
57
  if el == nil {
@@ -51,7 +59,7 @@ func jsxElementFromNode(node *shimast.Node) jsxElementInfo {
51
59
  }
52
60
  info.opening = node
53
61
  info.tag = jsxTagName(el.TagName)
54
- info.attrs = jsxAttrs(el.Attributes)
62
+ info.attrs, info.spread = jsxAttrs(el.Attributes)
55
63
  }
56
64
  return info
57
65
  }
@@ -66,16 +74,28 @@ func jsxTagName(node *shimast.Node) string {
66
74
  return ""
67
75
  }
68
76
 
69
- func jsxAttrs(node *shimast.Node) map[string]jsxAttr {
77
+ // jsxAttrs collects the named attributes of a JSX attributes node. The
78
+ // second result reports whether the list also contains a
79
+ // JsxSpreadAttribute (`{...props}`); spread members carry an unknown prop
80
+ // set and cannot be cast with AsJsxAttribute (the interface conversion
81
+ // panics), so they are skipped here and surfaced through the flag.
82
+ func jsxAttrs(node *shimast.Node) (map[string]jsxAttr, bool) {
70
83
  out := map[string]jsxAttr{}
84
+ spread := false
71
85
  if node == nil {
72
- return out
86
+ return out, spread
73
87
  }
74
88
  attrs := node.AsJsxAttributes()
75
89
  if attrs == nil || attrs.Properties == nil {
76
- return out
90
+ return out, spread
77
91
  }
78
92
  for _, prop := range attrs.Properties.Nodes {
93
+ if prop == nil || prop.Kind != shimast.KindJsxAttribute {
94
+ if prop != nil && prop.Kind == shimast.KindJsxSpreadAttribute {
95
+ spread = true
96
+ }
97
+ continue
98
+ }
79
99
  attr := prop.AsJsxAttribute()
80
100
  if attr == nil || attr.Name() == nil {
81
101
  continue
@@ -91,7 +111,7 @@ func jsxAttrs(node *shimast.Node) map[string]jsxAttr {
91
111
  boolean: attr.Initializer == nil,
92
112
  }
93
113
  }
94
- return out
114
+ return out, spread
95
115
  }
96
116
 
97
117
  func jsxAttrName(node *shimast.Node) string {
@@ -564,6 +584,11 @@ func (jsxA11yAltText) Visits() []shimast.Kind {
564
584
  }
565
585
  func (jsxA11yAltText) Check(ctx *Context, node *shimast.Node) {
566
586
  info := jsxElementFromNode(node)
587
+ // Every report below is about a missing alt/label, which a spread may
588
+ // provide.
589
+ if info.spread {
590
+ return
591
+ }
567
592
  switch info.tag {
568
593
  case "img", "area":
569
594
  if !jsxHasAttr(info.attrs, "alt", "aria-label", "aria-labelledby") {
@@ -587,7 +612,7 @@ func (jsxA11yAnchorHasContent) Name() string { return "jsx-a11y/anchor
587
612
  func (jsxA11yAnchorHasContent) Visits() []shimast.Kind { return []shimast.Kind{shimast.KindJsxElement} }
588
613
  func (jsxA11yAnchorHasContent) Check(ctx *Context, node *shimast.Node) {
589
614
  info := jsxElementFromNode(node)
590
- if info.tag == "a" && !jsxHasAccessibleLabel(info) {
615
+ if info.tag == "a" && !info.spread && !jsxHasAccessibleLabel(info) {
591
616
  ctx.Report(info.opening, "Anchors must have accessible content.")
592
617
  }
593
618
  }
@@ -605,7 +630,11 @@ func (jsxA11yAnchorIsValid) Check(ctx *Context, node *shimast.Node) {
605
630
  }
606
631
  href, ok := jsxKnownAttr(info.attrs, "href")
607
632
  if !ok {
608
- ctx.Report(info.opening, "Anchor elements must have a valid href.")
633
+ // The href may be provided (or statically unknowable) through a
634
+ // spread; only its outright absence is reportable.
635
+ if !info.spread {
636
+ ctx.Report(info.opening, "Anchor elements must have a valid href.")
637
+ }
609
638
  return
610
639
  }
611
640
  value := strings.TrimSpace(strings.ToLower(href.value))
@@ -624,7 +653,7 @@ func (jsxA11yAriaActivedescendantHasTabindex) Visits() []shimast.Kind {
624
653
  }
625
654
  func (jsxA11yAriaActivedescendantHasTabindex) Check(ctx *Context, node *shimast.Node) {
626
655
  info := jsxElementFromNode(node)
627
- if jsxHasAttr(info.attrs, "aria-activedescendant") && !jsxHasAttr(info.attrs, "tabIndex", "tabindex") {
656
+ if jsxHasAttr(info.attrs, "aria-activedescendant") && !info.spread && !jsxHasAttr(info.attrs, "tabIndex", "tabindex") {
628
657
  ctx.Report(info.opening, "Elements with aria-activedescendant must define tabIndex.")
629
658
  }
630
659
  }
@@ -753,7 +782,8 @@ func (jsxA11yClickEventsHaveKeyEvents) Visits() []shimast.Kind {
753
782
  }
754
783
  func (jsxA11yClickEventsHaveKeyEvents) Check(ctx *Context, node *shimast.Node) {
755
784
  info := jsxElementFromNode(node)
756
- if !jsxHasAttr(info.attrs, "onClick", "onclick") || jsxIsHidden(info) || jsxIsInteractive(info) || jsxHasKeyboardHandler(info.attrs) {
785
+ // A spread may provide the keyboard handler (or a role/hidden state).
786
+ if info.spread || !jsxHasAttr(info.attrs, "onClick", "onclick") || jsxIsHidden(info) || jsxIsInteractive(info) || jsxHasKeyboardHandler(info.attrs) {
757
787
  return
758
788
  }
759
789
  ctx.Report(info.opening, "Clickable non-interactive elements must also handle keyboard events.")
@@ -767,7 +797,7 @@ func (jsxA11yControlHasAssociatedLabel) Visits() []shimast.Kind {
767
797
  }
768
798
  func (jsxA11yControlHasAssociatedLabel) Check(ctx *Context, node *shimast.Node) {
769
799
  info := jsxElementFromNode(node)
770
- if (jsxIsFormControl(info) || jsxIsInteractive(info)) && !jsxHasAccessibleLabel(info) {
800
+ if (jsxIsFormControl(info) || jsxIsInteractive(info)) && !info.spread && !jsxHasAccessibleLabel(info) {
771
801
  ctx.Report(info.opening, "Interactive controls must have an accessible label.")
772
802
  }
773
803
  }
@@ -782,7 +812,7 @@ func (jsxA11yHeadingHasContent) Check(ctx *Context, node *shimast.Node) {
782
812
  info := jsxElementFromNode(node)
783
813
  switch info.tag {
784
814
  case "h1", "h2", "h3", "h4", "h5", "h6":
785
- if !jsxHasAccessibleLabel(info) {
815
+ if !info.spread && !jsxHasAccessibleLabel(info) {
786
816
  ctx.Report(info.opening, "Headings must have accessible content.")
787
817
  }
788
818
  }
@@ -796,7 +826,7 @@ func (jsxA11yHtmlHasLang) Visits() []shimast.Kind {
796
826
  }
797
827
  func (jsxA11yHtmlHasLang) Check(ctx *Context, node *shimast.Node) {
798
828
  info := jsxElementFromNode(node)
799
- if info.tag == "html" && !jsxHasAttr(info.attrs, "lang") {
829
+ if info.tag == "html" && !info.spread && !jsxHasAttr(info.attrs, "lang") {
800
830
  ctx.Report(info.opening, "The html element must have a lang attribute.")
801
831
  }
802
832
  }
@@ -809,7 +839,7 @@ func (jsxA11yIframeHasTitle) Visits() []shimast.Kind {
809
839
  }
810
840
  func (jsxA11yIframeHasTitle) Check(ctx *Context, node *shimast.Node) {
811
841
  info := jsxElementFromNode(node)
812
- if info.tag == "iframe" {
842
+ if info.tag == "iframe" && !info.spread {
813
843
  attr, ok := jsxKnownAttr(info.attrs, "title")
814
844
  if !ok || strings.TrimSpace(attr.value) == "" {
815
845
  ctx.Report(info.opening, "Iframes must have a non-empty title.")
@@ -846,7 +876,7 @@ func (jsxA11yInteractiveSupportsFocus) Visits() []shimast.Kind {
846
876
  }
847
877
  func (jsxA11yInteractiveSupportsFocus) Check(ctx *Context, node *shimast.Node) {
848
878
  info := jsxElementFromNode(node)
849
- if role, ok := jsxRole(info.attrs); ok && jsxInteractiveRoles[role] && !jsxIsFocusable(info) {
879
+ if role, ok := jsxRole(info.attrs); ok && jsxInteractiveRoles[role] && !info.spread && !jsxIsFocusable(info) {
850
880
  ctx.Report(info.opening, "Elements with interactive roles must be focusable.")
851
881
  }
852
882
  }
@@ -859,7 +889,7 @@ func (jsxA11yLabelHasAssociatedControl) Visits() []shimast.Kind {
859
889
  }
860
890
  func (jsxA11yLabelHasAssociatedControl) Check(ctx *Context, node *shimast.Node) {
861
891
  info := jsxElementFromNode(node)
862
- if info.tag == "label" && !jsxHasAttr(info.attrs, "htmlFor", "for") && !jsxHasDescendantControl(info.children) {
892
+ if info.tag == "label" && !info.spread && !jsxHasAttr(info.attrs, "htmlFor", "for") && !jsxHasDescendantControl(info.children) {
863
893
  ctx.Report(info.opening, "Labels must be associated with a control.")
864
894
  }
865
895
  }
@@ -897,7 +927,7 @@ func (jsxA11yMediaHasCaption) Name() string { return "jsx-a11y/media-h
897
927
  func (jsxA11yMediaHasCaption) Visits() []shimast.Kind { return []shimast.Kind{shimast.KindJsxElement} }
898
928
  func (jsxA11yMediaHasCaption) Check(ctx *Context, node *shimast.Node) {
899
929
  info := jsxElementFromNode(node)
900
- if (info.tag == "audio" || info.tag == "video") && !jsxHasTrackCaption(info.children) {
930
+ if (info.tag == "audio" || info.tag == "video") && !info.spread && !jsxHasTrackCaption(info.children) {
901
931
  ctx.Report(info.opening, "Media elements must provide caption tracks.")
902
932
  }
903
933
  }
@@ -910,6 +940,10 @@ func (jsxA11yMouseEventsHaveKeyEvents) Visits() []shimast.Kind {
910
940
  }
911
941
  func (jsxA11yMouseEventsHaveKeyEvents) Check(ctx *Context, node *shimast.Node) {
912
942
  info := jsxElementFromNode(node)
943
+ // The paired focus handler may arrive through a spread.
944
+ if info.spread {
945
+ return
946
+ }
913
947
  if jsxHasAttr(info.attrs, "onMouseOver", "onmouseover") && !jsxHasAttr(info.attrs, "onFocus", "onfocus") {
914
948
  ctx.Report(info.opening, "onMouseOver must be paired with onFocus.")
915
949
  return
@@ -1026,7 +1060,8 @@ func (jsxA11yNoNoninteractiveTabindex) Visits() []shimast.Kind {
1026
1060
  }
1027
1061
  func (jsxA11yNoNoninteractiveTabindex) Check(ctx *Context, node *shimast.Node) {
1028
1062
  info := jsxElementFromNode(node)
1029
- if _, ok := jsxNumericAttr(info.attrs, "tabIndex", "tabindex"); ok && !jsxIsInteractive(info) {
1063
+ // A spread may provide an interactive role that legitimizes the tabIndex.
1064
+ if _, ok := jsxNumericAttr(info.attrs, "tabIndex", "tabindex"); ok && !info.spread && !jsxIsInteractive(info) {
1030
1065
  ctx.Report(info.opening, "Non-interactive elements must not be focusable with tabIndex.")
1031
1066
  }
1032
1067
  }
@@ -1062,7 +1097,8 @@ func (jsxA11yNoStaticElementInteractions) Visits() []shimast.Kind {
1062
1097
  }
1063
1098
  func (jsxA11yNoStaticElementInteractions) Check(ctx *Context, node *shimast.Node) {
1064
1099
  info := jsxElementFromNode(node)
1065
- if info.tag == "" || jsxIsInteractive(info) || jsxIsNonInteractiveElement(info.tag) || jsxHasAttr(info.attrs, "role") || !jsxHasMouseOrKeyboardInteraction(info.attrs) {
1100
+ // A spread may provide the required ARIA role.
1101
+ if info.tag == "" || info.spread || jsxIsInteractive(info) || jsxIsNonInteractiveElement(info.tag) || jsxHasAttr(info.attrs, "role") || !jsxHasMouseOrKeyboardInteraction(info.attrs) {
1066
1102
  return
1067
1103
  }
1068
1104
  ctx.Report(info.opening, "Static elements with interaction handlers must have an ARIA role.")
@@ -1099,6 +1135,10 @@ func (jsxA11yRoleHasRequiredAriaProps) Check(ctx *Context, node *shimast.Node) {
1099
1135
  if !ok {
1100
1136
  return
1101
1137
  }
1138
+ // The required ARIA props may arrive through a spread.
1139
+ if info.spread {
1140
+ return
1141
+ }
1102
1142
  for _, required := range jsxRoleRequiredProps[role] {
1103
1143
  if !jsxHasAttr(info.attrs, required) {
1104
1144
  ctx.Report(info.opening, "Role "+role+" requires "+required+".")
@@ -428,6 +428,13 @@ func reactJSXAttrs(node *shimast.Node) []reactJSXAttr {
428
428
  }
429
429
  out := make([]reactJSXAttr, 0, len(attrs.Properties.Nodes))
430
430
  for _, prop := range attrs.Properties.Nodes {
431
+ // `{...props}` members are JsxSpreadAttribute nodes; casting them
432
+ // with AsJsxAttribute panics, so skip them like the nextjs and solid
433
+ // helpers do. Treating spreads as not providing any prop matches the
434
+ // upstream eslint-plugin-react defaults (jsx-ast-utils spreadStrict).
435
+ if prop == nil || prop.Kind != shimast.KindJsxAttribute {
436
+ continue
437
+ }
431
438
  attr := prop.AsJsxAttribute()
432
439
  if attr == nil || attr.Name() == nil {
433
440
  continue
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ttsc/lint",
3
- "version": "0.18.0",
3
+ "version": "0.18.2",
4
4
  "description": "Reference ttsc plugin: ESLint-style lint rules hosted in the same Program/Checker as the type-check pass.",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -36,7 +36,7 @@
36
36
  "@types/node": "^25.3.0",
37
37
  "rimraf": "^6.1.2",
38
38
  "typescript": "^7.0.2",
39
- "ttsc": "0.18.0"
39
+ "ttsc": "0.18.2"
40
40
  },
41
41
  "repository": {
42
42
  "type": "git",
package/src/index.ts CHANGED
@@ -260,14 +260,35 @@ function readConfigFileOption(
260
260
  function findLintConfigFile(
261
261
  context: TtscPluginFactoryContext<ITtscLintPluginConfig>,
262
262
  ): string | undefined {
263
- // Mirror the Go-side discovery loop: walk from the tsconfig directory
264
- // upward, returning the first directory that has exactly one of the
265
- // candidate filenames. Multiple files in the same directory is treated
266
- // as ambiguous and skipped (the Go side raises a hard error on the
267
- // duplicate; here we leave it to the binary's own discovery to surface
268
- // the issue once with one canonical message).
263
+ // Mirror the Go-side discovery origins: walk upward from the tsconfig
264
+ // directory first, then fall back to the working directory. The fallback
265
+ // covers callers that point at an out-of-tree tsconfig (e.g. a
266
+ // TtscCompiler invocation whose wrapper tsconfig lives in the system temp
267
+ // dir while cwd/projectRoot is the real project) without it the walk
268
+ // dead-ends in the temp dir's ancestry and the project's config (and its
269
+ // contributor plugins) are silently missed.
270
+ const tsconfigDir = tsconfigBaseDir(context);
271
+ const cwd = path.resolve(context.cwd ?? context.projectRoot);
272
+ for (const origin of tsconfigDir === cwd
273
+ ? [tsconfigDir]
274
+ : [tsconfigDir, cwd]) {
275
+ const discovered = findLintConfigFileFrom(origin);
276
+ if (discovered !== undefined) {
277
+ return discovered;
278
+ }
279
+ }
280
+ return undefined;
281
+ }
282
+
283
+ function findLintConfigFileFrom(origin: string): string | undefined {
284
+ // Mirror the Go-side discovery loop: walk from `origin` upward, returning
285
+ // the first directory that has exactly one of the candidate filenames.
286
+ // Multiple files in the same directory is treated as ambiguous and skipped
287
+ // (the Go side raises a hard error on the duplicate; here we leave it to
288
+ // the binary's own discovery to surface the issue once with one canonical
289
+ // message).
269
290
  const candidateSet = new Set<string>(LINT_CONFIG_FILENAMES);
270
- let dir = tsconfigBaseDir(context);
291
+ let dir = origin;
271
292
  while (true) {
272
293
  // One `readdirSync` per directory level beats 14 `existsSync`+
273
294
  // `statSync` pairs (= 28 stat syscalls) per level; intersect the
@@ -396,6 +417,14 @@ function readCjsConfigPlugins(configPath: string): ConfigPluginEntry[] {
396
417
  // serialise arbitrary in-memory plugin objects across the process boundary.
397
418
  // The URL lives in a variable so tsgo does not statically resolve it.
398
419
  const TTSX_EXTRACTOR_SCRIPT = `const configUrl = %CONFIG_IMPORT%;
420
+ const CONFIG_KEYS = new Set<string>([
421
+ "files",
422
+ "ignores",
423
+ "extends",
424
+ "plugins",
425
+ "rules",
426
+ "format",
427
+ ]);
399
428
  const importedConfig = await import(configUrl);
400
429
 
401
430
  declare const process: {
@@ -406,17 +435,7 @@ declare const process: {
406
435
  };
407
436
 
408
437
  try {
409
- let current: unknown = importedConfig;
410
- for (let i = 0; i < 8; i++) {
411
- if (isObject(current) && hasOwn(current, "default")) {
412
- current = (current as Record<string, unknown>).default;
413
- continue;
414
- }
415
- break;
416
- }
417
- if (typeof current === "function") {
418
- current = await (current as () => unknown | Promise<unknown>)();
419
- }
438
+ const current = await resolveConfig(importedConfig, true);
420
439
  const pluginMaps = collectPluginObjects(current);
421
440
  const entries: Array<{ namespace: string; source: string }> = [];
422
441
  for (const map of pluginMaps) {
@@ -440,6 +459,71 @@ function hasOwn(value: Record<string, unknown>, key: string): boolean {
440
459
  return Object.prototype.hasOwnProperty.call(value, key);
441
460
  }
442
461
 
462
+ async function resolveConfig(value: unknown, allowNamedConfig: boolean): Promise<unknown> {
463
+ let current = value;
464
+ for (let i = 0; i < 8; i++) {
465
+ if (typeof current === "function") {
466
+ current = await (current as () => unknown | Promise<unknown>)();
467
+ allowNamedConfig = false;
468
+ continue;
469
+ }
470
+ if (isObject(current) && !Array.isArray(current)) {
471
+ if (hasOwn(current, "default")) {
472
+ const defaultValue = current.default;
473
+ if (isModuleNamespace(current) || !hasConfigKey(current)) {
474
+ current = defaultValue;
475
+ allowNamedConfig = false;
476
+ continue;
477
+ }
478
+ const normalizedDefault = await resolveConfig(defaultValue, false);
479
+ if (isObject(normalizedDefault) && !Array.isArray(normalizedDefault)) {
480
+ current = mergeConfigObjects(normalizedDefault, current);
481
+ allowNamedConfig = false;
482
+ continue;
483
+ }
484
+ }
485
+ if (allowNamedConfig && hasOwn(current, "config")) {
486
+ current = current.config;
487
+ allowNamedConfig = false;
488
+ continue;
489
+ }
490
+ }
491
+ break;
492
+ }
493
+ return current;
494
+ }
495
+
496
+ function isModuleNamespace(value: Record<string, unknown>): boolean {
497
+ return Object.prototype.toString.call(value) === "[object Module]";
498
+ }
499
+
500
+ function hasConfigKey(value: Record<string, unknown>): boolean {
501
+ for (const key of CONFIG_KEYS) {
502
+ if (hasOwn(value, key)) {
503
+ return true;
504
+ }
505
+ }
506
+ return false;
507
+ }
508
+
509
+ function mergeConfigObjects(
510
+ base: Record<string, unknown>,
511
+ override: Record<string, unknown>,
512
+ ): Record<string, unknown> {
513
+ const out: Record<string, unknown> = {};
514
+ for (const key of CONFIG_KEYS) {
515
+ if (hasOwn(base, key)) {
516
+ out[key] = base[key];
517
+ }
518
+ }
519
+ for (const key of CONFIG_KEYS) {
520
+ if (hasOwn(override, key)) {
521
+ out[key] = override[key];
522
+ }
523
+ }
524
+ return out;
525
+ }
526
+
443
527
  function collectPluginObjects(value: unknown): Array<Record<string, unknown>> {
444
528
  const out: Array<Record<string, unknown>> = [];
445
529
  visit(value);
@@ -684,7 +768,7 @@ function evaluateTtsxConfigPlugins(
684
768
  * Namespaces the on-disk config cache. Kept in lockstep with the Go sidecar's
685
769
  * `configCacheVersion`; bump both when the cached shape changes.
686
770
  */
687
- const CONFIG_CACHE_VERSION = "v1";
771
+ const CONFIG_CACHE_VERSION = "v2";
688
772
 
689
773
  /**
690
774
  * Directory shared by this factory and the Go sidecar for cached lint configs.
@@ -12,7 +12,14 @@ export interface ITtscLintConfig {
12
12
  /** Globs that select the files this entry applies to. */
13
13
  files?: string | readonly string[];
14
14
 
15
- /** Globs that exclude files this entry would otherwise match. */
15
+ /**
16
+ * Globs that exclude files from linting.
17
+ *
18
+ * When `files` is also set, the ignores only refine that selection (the
19
+ * entry's rules skip the matched files). Without `files`, the ignores are
20
+ * global: the matched files are excluded from every rule in the resolved
21
+ * config, including rules inherited through `extends`.
22
+ */
16
23
  ignores?: string | readonly string[];
17
24
 
18
25
  /**