@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 +102 -19
- package/lib/index.js.map +1 -1
- package/lib/structures/ITtscLintConfig.d.ts +8 -1
- package/linthost/config.go +185 -52
- package/linthost/rules_jsx_a11y.go +60 -20
- package/linthost/rules_react.go +7 -0
- package/package.json +2 -2
- package/src/index.ts +103 -19
- package/src/structures/ITtscLintConfig.ts +8 -1
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
|
|
204
|
-
//
|
|
205
|
-
//
|
|
206
|
-
//
|
|
207
|
-
//
|
|
208
|
-
// the
|
|
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 =
|
|
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
|
-
|
|
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 = "
|
|
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
|
-
/**
|
|
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.
|
package/linthost/config.go
CHANGED
|
@@ -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(
|
|
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
|
-
|
|
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
|
-
//
|
|
850
|
-
// upward when no explicit config path is provided.
|
|
851
|
-
// directory
|
|
852
|
-
// tsconfig that triggered the lint run
|
|
853
|
-
|
|
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
|
-
|
|
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
|
|
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 = "
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
//
|
|
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 (
|
|
1317
|
-
current = current
|
|
1410
|
+
if (typeof current === "function") {
|
|
1411
|
+
current = await (current as () => unknown | Promise<unknown>)();
|
|
1318
1412
|
allowNamedConfig = false;
|
|
1319
1413
|
continue;
|
|
1320
1414
|
}
|
|
1321
|
-
if (
|
|
1322
|
-
current
|
|
1323
|
-
|
|
1324
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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+".")
|
package/linthost/rules_react.go
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
|
264
|
-
//
|
|
265
|
-
//
|
|
266
|
-
//
|
|
267
|
-
//
|
|
268
|
-
// the
|
|
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 =
|
|
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
|
-
|
|
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 = "
|
|
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
|
-
/**
|
|
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
|
/**
|