Skip to content

Commit 0e736a7

Browse files
authored
Fix the usage of pattern matching in module resolution for check of hasZeroOrOneAsteriskCharacter (microsoft#35209)
* Fix the usage of pattern matching for check of hasZeroOrOneAsteriskCharacter Fixes microsoft#35171 * Fix error message
1 parent 17f5469 commit 0e736a7

9 files changed

+92
-6
lines changed

src/compiler/diagnosticMessages.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3241,7 +3241,7 @@
32413241
"category": "Error",
32423242
"code": 5061
32433243
},
3244-
"Substitution '{0}' in pattern '{1}' in can have at most one '*' character.": {
3244+
"Substitution '{0}' in pattern '{1}' can have at most one '*' character.": {
32453245
"category": "Error",
32463246
"code": 5062
32473247
},

src/compiler/program.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2980,7 +2980,7 @@ namespace ts {
29802980
const typeOfSubst = typeof subst;
29812981
if (typeOfSubst === "string") {
29822982
if (!hasZeroOrOneAsteriskCharacter(subst)) {
2983-
createDiagnosticForOptionPathKeyValue(key, i, Diagnostics.Substitution_0_in_pattern_1_in_can_have_at_most_one_Asterisk_character, subst, key);
2983+
createDiagnosticForOptionPathKeyValue(key, i, Diagnostics.Substitution_0_in_pattern_1_can_have_at_most_one_Asterisk_character, subst, key);
29842984
}
29852985
}
29862986
else {

src/compiler/utilities.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8285,6 +8285,7 @@ namespace ts {
82858285
export function matchPatternOrExact(patternStrings: readonly string[], candidate: string): string | Pattern | undefined {
82868286
const patterns: Pattern[] = [];
82878287
for (const patternString of patternStrings) {
8288+
if (!hasZeroOrOneAsteriskCharacter(patternString)) continue;
82888289
const pattern = tryParsePattern(patternString);
82898290
if (pattern) {
82908291
patterns.push(pattern);

tests/baselines/reference/pathMappingBasedModuleResolution2_classic.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
tests/cases/compiler/root/tsconfig.json(8,13): error TS5061: Pattern '*1*' can have at most one '*' character.
2-
tests/cases/compiler/root/tsconfig.json(8,22): error TS5062: Substitution '*2*' in pattern '*1*' in can have at most one '*' character.
2+
tests/cases/compiler/root/tsconfig.json(8,22): error TS5062: Substitution '*2*' in pattern '*1*' can have at most one '*' character.
33

44

55
==== tests/cases/compiler/root/tsconfig.json (2 errors) ====
@@ -14,7 +14,7 @@ tests/cases/compiler/root/tsconfig.json(8,22): error TS5062: Substitution '*2*'
1414
~~~~~
1515
!!! error TS5061: Pattern '*1*' can have at most one '*' character.
1616
~~~~~
17-
!!! error TS5062: Substitution '*2*' in pattern '*1*' in can have at most one '*' character.
17+
!!! error TS5062: Substitution '*2*' in pattern '*1*' can have at most one '*' character.
1818
}
1919
}
2020
}

tests/baselines/reference/pathMappingBasedModuleResolution2_node.errors.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
tests/cases/compiler/root/tsconfig.json(8,13): error TS5061: Pattern '*1*' can have at most one '*' character.
2-
tests/cases/compiler/root/tsconfig.json(8,22): error TS5062: Substitution '*2*' in pattern '*1*' in can have at most one '*' character.
2+
tests/cases/compiler/root/tsconfig.json(8,22): error TS5062: Substitution '*2*' in pattern '*1*' can have at most one '*' character.
33

44

55
==== tests/cases/compiler/root/tsconfig.json (2 errors) ====
@@ -14,7 +14,7 @@ tests/cases/compiler/root/tsconfig.json(8,22): error TS5062: Substitution '*2*'
1414
~~~~~
1515
!!! error TS5061: Pattern '*1*' can have at most one '*' character.
1616
~~~~~
17-
!!! error TS5062: Substitution '*2*' in pattern '*1*' in can have at most one '*' character.
17+
!!! error TS5062: Substitution '*2*' in pattern '*1*' can have at most one '*' character.
1818
}
1919
}
2020
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
tests/cases/compiler/tsconfig.json(6,11): error TS5061: Pattern '@interface/**/*' can have at most one '*' character.
2+
tests/cases/compiler/tsconfig.json(7,11): error TS5061: Pattern '@service/**/*' can have at most one '*' character.
3+
tests/cases/compiler/tsconfig.json(7,29): error TS5062: Substitution './src/service/**/*' in pattern '@service/**/*' can have at most one '*' character.
4+
5+
6+
==== tests/cases/compiler/tsconfig.json (3 errors) ====
7+
{
8+
"compilerOptions": {
9+
"traceResolution": true,
10+
"baseUrl": "./src",
11+
"paths": {
12+
"@interface/**/*" : ["./src/interface/*"],
13+
~~~~~~~~~~~~~~~~~
14+
!!! error TS5061: Pattern '@interface/**/*' can have at most one '*' character.
15+
"@service/**/*": ["./src/service/**/*"],
16+
~~~~~~~~~~~~~~~
17+
!!! error TS5061: Pattern '@service/**/*' can have at most one '*' character.
18+
~~~~~~~~~~~~~~~~~~~~
19+
!!! error TS5062: Substitution './src/service/**/*' in pattern '@service/**/*' can have at most one '*' character.
20+
"@controller/*": ["controller/*"],
21+
}
22+
}
23+
}
24+
25+
==== tests/cases/compiler/src/main.ts (0 errors) ====
26+
import 'someModule';
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
//// [main.ts]
2+
import 'someModule';
3+
4+
//// [main.js]
5+
"use strict";
6+
exports.__esModule = true;
7+
require("someModule");
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
[
2+
"======== Resolving module 'someModule' from 'tests/cases/compiler/src/main.ts'. ========",
3+
"Module resolution kind is not specified, using 'NodeJs'.",
4+
"'baseUrl' option is set to 'tests/cases/compiler/src', using this value to resolve non-relative module name 'someModule'.",
5+
"'paths' option is specified, looking for a pattern to match module name 'someModule'.",
6+
"'baseUrl' option is set to 'tests/cases/compiler/src', using this value to resolve non-relative module name 'someModule'.",
7+
"Resolving module name 'someModule' relative to base url 'tests/cases/compiler/src' - 'tests/cases/compiler/src/someModule'.",
8+
"Loading module as file / folder, candidate module location 'tests/cases/compiler/src/someModule', target file type 'TypeScript'.",
9+
"File 'tests/cases/compiler/src/someModule.ts' does not exist.",
10+
"File 'tests/cases/compiler/src/someModule.tsx' does not exist.",
11+
"File 'tests/cases/compiler/src/someModule.d.ts' does not exist.",
12+
"Directory 'tests/cases/compiler/src/someModule' does not exist, skipping all lookups in it.",
13+
"Loading module 'someModule' from 'node_modules' folder, target file type 'TypeScript'.",
14+
"Directory 'tests/cases/compiler/src/node_modules' does not exist, skipping all lookups in it.",
15+
"Directory 'tests/cases/compiler/node_modules' does not exist, skipping all lookups in it.",
16+
"Directory 'tests/cases/node_modules' does not exist, skipping all lookups in it.",
17+
"Directory 'tests/node_modules' does not exist, skipping all lookups in it.",
18+
"Directory 'node_modules' does not exist, skipping all lookups in it.",
19+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
20+
"'baseUrl' option is set to 'tests/cases/compiler/src', using this value to resolve non-relative module name 'someModule'.",
21+
"'paths' option is specified, looking for a pattern to match module name 'someModule'.",
22+
"'baseUrl' option is set to 'tests/cases/compiler/src', using this value to resolve non-relative module name 'someModule'.",
23+
"Resolving module name 'someModule' relative to base url 'tests/cases/compiler/src' - 'tests/cases/compiler/src/someModule'.",
24+
"Loading module as file / folder, candidate module location 'tests/cases/compiler/src/someModule', target file type 'JavaScript'.",
25+
"File 'tests/cases/compiler/src/someModule.js' does not exist.",
26+
"File 'tests/cases/compiler/src/someModule.jsx' does not exist.",
27+
"Directory 'tests/cases/compiler/src/someModule' does not exist, skipping all lookups in it.",
28+
"Loading module 'someModule' from 'node_modules' folder, target file type 'JavaScript'.",
29+
"Directory 'tests/cases/compiler/src/node_modules' does not exist, skipping all lookups in it.",
30+
"Directory 'tests/cases/compiler/node_modules' does not exist, skipping all lookups in it.",
31+
"Directory 'tests/cases/node_modules' does not exist, skipping all lookups in it.",
32+
"Directory 'tests/node_modules' does not exist, skipping all lookups in it.",
33+
"Directory 'node_modules' does not exist, skipping all lookups in it.",
34+
"Directory '/node_modules' does not exist, skipping all lookups in it.",
35+
"======== Module name 'someModule' was not resolved. ========"
36+
]
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// @noTypesAndSymbols: true
2+
// @filename: tsconfig.json
3+
{
4+
"compilerOptions": {
5+
"traceResolution": true,
6+
"baseUrl": "./src",
7+
"paths": {
8+
"@interface/**/*" : ["./src/interface/*"],
9+
"@service/**/*": ["./src/service/**/*"],
10+
"@controller/*": ["controller/*"],
11+
}
12+
}
13+
}
14+
15+
// @filename: src/main.ts
16+
import 'someModule';

0 commit comments

Comments
 (0)