@alloy-js/csharp 0.23.0-dev.10 → 0.23.0-dev.11
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/dist/dev/src/components/method/method.test.js +64 -0
- package/dist/dev/src/components/method/method.test.js.map +1 -1
- package/dist/dev/src/identifier-utils.js +45 -0
- package/dist/dev/src/identifier-utils.js.map +1 -0
- package/dist/dev/src/index.js +2 -0
- package/dist/dev/src/index.js.map +1 -1
- package/dist/dev/src/keywords.js +39 -0
- package/dist/dev/src/keywords.js.map +1 -0
- package/dist/dev/src/name-policy.js +29 -6
- package/dist/dev/src/name-policy.js.map +1 -1
- package/dist/dev/src/name-policy.test.js +167 -0
- package/dist/dev/src/name-policy.test.js.map +1 -0
- package/dist/src/components/method/method.test.js +48 -0
- package/dist/src/components/method/method.test.js.map +1 -1
- package/dist/src/identifier-utils.d.ts +22 -0
- package/dist/src/identifier-utils.d.ts.map +1 -0
- package/dist/src/identifier-utils.js +45 -0
- package/dist/src/identifier-utils.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/keywords.d.ts +32 -0
- package/dist/src/keywords.d.ts.map +1 -0
- package/dist/src/keywords.js +39 -0
- package/dist/src/keywords.js.map +1 -0
- package/dist/src/name-policy.d.ts +7 -0
- package/dist/src/name-policy.d.ts.map +1 -1
- package/dist/src/name-policy.js +29 -6
- package/dist/src/name-policy.js.map +1 -1
- package/dist/src/name-policy.test.d.ts +2 -0
- package/dist/src/name-policy.test.d.ts.map +1 -0
- package/dist/src/name-policy.test.js +167 -0
- package/dist/src/name-policy.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/api/contexts/csharp-context.md +21 -0
- package/docs/api/contexts/index.md +3 -0
- package/docs/api/functions/createCSharpNamePolicy.md +4 -0
- package/docs/api/functions/index.md +5 -1
- package/docs/api/functions/isCSharpContextualKeyword.md +20 -0
- package/docs/api/functions/isCSharpKeyword.md +22 -0
- package/docs/api/functions/isValidCSharpIdentifier.md +20 -0
- package/docs/api/functions/sanitizeCSharpIdentifier.md +24 -0
- package/docs/api/index.md +3 -2
- package/docs/api/variables/csharpKeywords.md +11 -0
- package/docs/api/variables/index.md +1 -0
- package/package.json +3 -3
- package/src/components/method/method.test.tsx +36 -0
- package/src/identifier-utils.ts +45 -0
- package/src/index.ts +2 -0
- package/src/keywords.ts +162 -0
- package/src/name-policy.test.ts +210 -0
- package/src/name-policy.ts +30 -6
- package/temp/api.json +237 -1
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC"}
|
package/dist/src/index.js
CHANGED
|
@@ -2,6 +2,8 @@ export * from "./access.js";
|
|
|
2
2
|
export * from "./components/index.js";
|
|
3
3
|
export * from "./contexts/format-options.js";
|
|
4
4
|
export * from "./create-library.js";
|
|
5
|
+
export * from "./identifier-utils.js";
|
|
6
|
+
export * from "./keywords.js";
|
|
5
7
|
export * from "./modifiers.js";
|
|
6
8
|
export * from "./name-policy.js";
|
|
7
9
|
export * from "./scopes/index.js";
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;AACA,cAAc,uBAAuB;AACrC,cAAc,8BAA8B;AAC5C,cAAc,qBAAqB;AACnC,cAAc,gBAAgB;AAC9B,cAAc,kBAAkB;AAChC,cAAc,mBAAmB;AACjC,cAAc,oBAAoB","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA;AACA,cAAc,uBAAuB;AACrC,cAAc,8BAA8B;AAC5C,cAAc,qBAAqB;AACnC,cAAc,uBAAuB;AACrC,cAAc,eAAe;AAC7B,cAAc,gBAAgB;AAC9B,cAAc,kBAAkB;AAChC,cAAc,mBAAmB;AACjC,cAAc,oBAAoB","ignoreList":[]}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C# reserved keywords that cannot be used as identifiers without `@` prefix.
|
|
3
|
+
* These are case-sensitive in C#.
|
|
4
|
+
*
|
|
5
|
+
* @see https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/
|
|
6
|
+
*/
|
|
7
|
+
export declare const csharpKeywords: ReadonlySet<string>;
|
|
8
|
+
/**
|
|
9
|
+
* C# contextual keywords that are reserved in certain contexts.
|
|
10
|
+
* While not always reserved, treating them as keywords in generated code
|
|
11
|
+
* avoids subtle context-dependent issues.
|
|
12
|
+
*
|
|
13
|
+
* @see https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/#contextual-keywords
|
|
14
|
+
*/
|
|
15
|
+
export declare const csharpContextualKeywords: ReadonlySet<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Returns true if the given name is a C# reserved keyword.
|
|
18
|
+
* The check is case-sensitive, matching C# language semantics.
|
|
19
|
+
*
|
|
20
|
+
* Note: this only checks reserved keywords, not contextual keywords.
|
|
21
|
+
* Contextual keywords are only reserved in specific language contexts
|
|
22
|
+
* and are valid identifiers elsewhere (e.g., `value` is valid as a parameter name).
|
|
23
|
+
* Use {@link isCSharpContextualKeyword} to check contextual keywords separately.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isCSharpKeyword(name: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Returns true if the given name is a C# contextual keyword.
|
|
28
|
+
* Contextual keywords are only reserved in specific language contexts
|
|
29
|
+
* and are generally valid as identifiers.
|
|
30
|
+
*/
|
|
31
|
+
export declare function isCSharpContextualKeyword(name: string): boolean;
|
|
32
|
+
//# sourceMappingURL=keywords.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keywords.d.ts","sourceRoot":"","sources":["../../src/keywords.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,WAAW,CAAC,MAAM,CA8E7C,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CA8CvD,CAAC;AAEH;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C# reserved keywords that cannot be used as identifiers without `@` prefix.
|
|
3
|
+
* These are case-sensitive in C#.
|
|
4
|
+
*
|
|
5
|
+
* @see https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/
|
|
6
|
+
*/
|
|
7
|
+
export const csharpKeywords = new Set(["abstract", "as", "base", "bool", "break", "byte", "case", "catch", "char", "checked", "class", "const", "continue", "decimal", "default", "delegate", "do", "double", "else", "enum", "event", "explicit", "extern", "false", "finally", "fixed", "float", "for", "foreach", "goto", "if", "implicit", "in", "int", "interface", "internal", "is", "lock", "long", "namespace", "new", "null", "object", "operator", "out", "override", "params", "private", "protected", "public", "readonly", "ref", "return", "sbyte", "sealed", "short", "sizeof", "stackalloc", "static", "string", "struct", "switch", "this", "throw", "true", "try", "typeof", "uint", "ulong", "unchecked", "unsafe", "ushort", "using", "virtual", "void", "volatile", "while"]);
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* C# contextual keywords that are reserved in certain contexts.
|
|
11
|
+
* While not always reserved, treating them as keywords in generated code
|
|
12
|
+
* avoids subtle context-dependent issues.
|
|
13
|
+
*
|
|
14
|
+
* @see https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/#contextual-keywords
|
|
15
|
+
*/
|
|
16
|
+
export const csharpContextualKeywords = new Set(["add", "allows", "alias", "and", "ascending", "args", "async", "await", "by", "descending", "dynamic", "equals", "field", "file", "from", "get", "global", "group", "init", "into", "join", "let", "managed", "nameof", "nint", "not", "notnull", "nuint", "on", "or", "orderby", "partial", "record", "remove", "required", "scoped", "select", "set", "unmanaged", "value", "var", "when", "where", "with", "yield"]);
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Returns true if the given name is a C# reserved keyword.
|
|
20
|
+
* The check is case-sensitive, matching C# language semantics.
|
|
21
|
+
*
|
|
22
|
+
* Note: this only checks reserved keywords, not contextual keywords.
|
|
23
|
+
* Contextual keywords are only reserved in specific language contexts
|
|
24
|
+
* and are valid identifiers elsewhere (e.g., `value` is valid as a parameter name).
|
|
25
|
+
* Use {@link isCSharpContextualKeyword} to check contextual keywords separately.
|
|
26
|
+
*/
|
|
27
|
+
export function isCSharpKeyword(name) {
|
|
28
|
+
return csharpKeywords.has(name);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Returns true if the given name is a C# contextual keyword.
|
|
33
|
+
* Contextual keywords are only reserved in specific language contexts
|
|
34
|
+
* and are generally valid as identifiers.
|
|
35
|
+
*/
|
|
36
|
+
export function isCSharpContextualKeyword(name) {
|
|
37
|
+
return csharpContextualKeywords.has(name);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=keywords.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["csharpKeywords","Set","csharpContextualKeywords","isCSharpKeyword","name","has","isCSharpContextualKeyword"],"sources":["../../src/keywords.ts"],"sourcesContent":[null],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,cAAmC,GAAG,IAAIC,GAAG,CAAC,CACzD,UAAU,EACV,IAAI,EACJ,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,MAAM,EACN,OAAO,EACP,MAAM,EACN,SAAS,EACT,OAAO,EACP,OAAO,EACP,UAAU,EACV,SAAS,EACT,SAAS,EACT,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,QAAQ,EACR,OAAO,EACP,SAAS,EACT,OAAO,EACP,OAAO,EACP,KAAK,EACL,SAAS,EACT,MAAM,EACN,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,KAAK,EACL,WAAW,EACX,UAAU,EACV,IAAI,EACJ,MAAM,EACN,MAAM,EACN,WAAW,EACX,KAAK,EACL,MAAM,EACN,QAAQ,EACR,UAAU,EACV,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,KAAK,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,OAAO,EACP,MAAM,EACN,KAAK,EACL,QAAQ,EACR,MAAM,EACN,OAAO,EACP,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,SAAS,EACT,MAAM,EACN,UAAU,EACV,OAAO,CACR,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,wBAA6C,GAAG,IAAID,GAAG,CAAC,CACnE,KAAK,EACL,QAAQ,EACR,OAAO,EACP,KAAK,EACL,WAAW,EACX,MAAM,EACN,OAAO,EACP,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,OAAO,EACP,MAAM,EACN,MAAM,EACN,KAAK,EACL,QAAQ,EACR,OAAO,EACP,MAAM,EACN,MAAM,EACN,MAAM,EACN,KAAK,EACL,SAAS,EACT,QAAQ,EACR,MAAM,EACN,KAAK,EACL,SAAS,EACT,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,WAAW,EACX,OAAO,EACP,KAAK,EACL,MAAM,EACN,OAAO,EACP,MAAM,EACN,OAAO,CACR,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,eAAeA,CAACC,IAAY,EAAW;EACrD,OAAOJ,cAAc,CAACK,GAAG,CAACD,IAAI,CAAC;AACjC;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,yBAAyBA,CAACF,IAAY,EAAW;EAC/D,OAAOF,wBAAwB,CAACG,GAAG,CAACD,IAAI,CAAC;AAC3C","ignoreList":[]}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import * as core from "@alloy-js/core";
|
|
2
2
|
export type CSharpElements = "class" | "constant" | "variable" | "struct" | "enum" | "enum-member" | "function" | "interface" | "record" | "class-member-private" | "class-member-public" | "class-method" | "class-property" | "parameter" | "type-parameter" | "namespace";
|
|
3
|
+
/**
|
|
4
|
+
* Creates the C# naming policy with case conversion and keyword escaping.
|
|
5
|
+
*
|
|
6
|
+
* After applying the appropriate case conversion for each element kind,
|
|
7
|
+
* the resulting name is checked against C# reserved and contextual keywords.
|
|
8
|
+
* If it matches (case-sensitively), the name is prefixed with `@`.
|
|
9
|
+
*/
|
|
3
10
|
export declare function createCSharpNamePolicy(): core.NamePolicy<CSharpElements>;
|
|
4
11
|
export declare function useCSharpNamePolicy(): core.NamePolicy<CSharpElements>;
|
|
5
12
|
//# sourceMappingURL=name-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"name-policy.d.ts","sourceRoot":"","sources":["../../src/name-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"name-policy.d.ts","sourceRoot":"","sources":["../../src/name-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAC;AAMvC,MAAM,MAAM,cAAc,GACtB,OAAO,GACP,UAAU,GACV,UAAU,GACV,QAAQ,GACR,MAAM,GACN,aAAa,GACb,UAAU,GACV,WAAW,GACX,QAAQ,GACR,sBAAsB,GACtB,qBAAqB,GACrB,cAAc,GACd,gBAAgB,GAChB,WAAW,GACX,gBAAgB,GAChB,WAAW,CAAC;AAWhB;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CA8BxE;AAGD,wBAAgB,mBAAmB,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,CAErE"}
|
package/dist/src/name-policy.js
CHANGED
|
@@ -1,12 +1,31 @@
|
|
|
1
1
|
import * as core from "@alloy-js/core";
|
|
2
2
|
import * as changecase from "change-case";
|
|
3
|
+
import { sanitizeCSharpIdentifier } from "./identifier-utils.js";
|
|
4
|
+
import { isCSharpKeyword } from "./keywords.js";
|
|
3
5
|
|
|
4
6
|
// the context in which the name policy should be applied
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Prefixes the name with `@` if it is a C# keyword.
|
|
10
|
+
* This is the idiomatic C# way to use reserved words as identifiers.
|
|
11
|
+
* The check is case-sensitive, matching C# language semantics.
|
|
12
|
+
*/
|
|
13
|
+
function escapeIfKeyword(name) {
|
|
14
|
+
return isCSharpKeyword(name) ? `@${name}` : name;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Creates the C# naming policy with case conversion and keyword escaping.
|
|
19
|
+
*
|
|
20
|
+
* After applying the appropriate case conversion for each element kind,
|
|
21
|
+
* the resulting name is checked against C# reserved and contextual keywords.
|
|
22
|
+
* If it matches (case-sensitively), the name is prefixed with `@`.
|
|
23
|
+
*/
|
|
7
24
|
export function createCSharpNamePolicy() {
|
|
8
25
|
return core.createNamePolicy((name, element) => {
|
|
26
|
+
let result;
|
|
9
27
|
switch (element) {
|
|
28
|
+
case "namespace":
|
|
10
29
|
case "class":
|
|
11
30
|
case "struct":
|
|
12
31
|
case "enum":
|
|
@@ -17,15 +36,19 @@ export function createCSharpNamePolicy() {
|
|
|
17
36
|
case "class-method":
|
|
18
37
|
case "type-parameter":
|
|
19
38
|
case "class-property":
|
|
20
|
-
|
|
21
|
-
|
|
39
|
+
result = changecase.pascalCase(name);
|
|
40
|
+
break;
|
|
22
41
|
case "constant":
|
|
23
|
-
|
|
42
|
+
result = changecase.constantCase(name);
|
|
43
|
+
break;
|
|
24
44
|
case "class-member-private":
|
|
25
|
-
|
|
45
|
+
result = `_${changecase.camelCase(name)}`;
|
|
46
|
+
break;
|
|
26
47
|
default:
|
|
27
|
-
|
|
48
|
+
result = changecase.camelCase(name);
|
|
49
|
+
break;
|
|
28
50
|
}
|
|
51
|
+
return escapeIfKeyword(sanitizeCSharpIdentifier(result));
|
|
29
52
|
});
|
|
30
53
|
}
|
|
31
54
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["core","changecase","
|
|
1
|
+
{"version":3,"names":["core","changecase","sanitizeCSharpIdentifier","isCSharpKeyword","escapeIfKeyword","name","createCSharpNamePolicy","createNamePolicy","element","result","pascalCase","constantCase","camelCase","useCSharpNamePolicy","useNamePolicy"],"sources":["../../src/name-policy.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAO,KAAKA,IAAI,MAAM,gBAAgB;AACtC,OAAO,KAAKC,UAAU,MAAM,aAAa;AACzC,SAASC,wBAAwB,QAAQ,uBAAuB;AAChE,SAASC,eAAe,QAAQ,eAAe;;AAE/C;;AAmBA;AACA;AACA;AACA;AACA;AACA,SAASC,eAAeA,CAACC,IAAY,EAAU;EAC7C,OAAOF,eAAe,CAACE,IAAI,CAAC,GAAG,IAAIA,IAAI,EAAE,GAAGA,IAAI;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,sBAAsBA,CAAA,EAAoC;EACxE,OAAON,IAAI,CAACO,gBAAgB,CAAC,CAACF,IAAI,EAAEG,OAAO,KAAK;IAC9C,IAAIC,MAAc;IAClB,QAAQD,OAAO;MACb,KAAK,WAAW;MAChB,KAAK,OAAO;MACZ,KAAK,QAAQ;MACb,KAAK,MAAM;MACX,KAAK,aAAa;MAClB,KAAK,WAAW;MAChB,KAAK,QAAQ;MACb,KAAK,qBAAqB;MAC1B,KAAK,cAAc;MACnB,KAAK,gBAAgB;MACrB,KAAK,gBAAgB;QACnBC,MAAM,GAAGR,UAAU,CAACS,UAAU,CAACL,IAAI,CAAC;QACpC;MACF,KAAK,UAAU;QACbI,MAAM,GAAGR,UAAU,CAACU,YAAY,CAACN,IAAI,CAAC;QACtC;MACF,KAAK,sBAAsB;QACzBI,MAAM,GAAG,IAAIR,UAAU,CAACW,SAAS,CAACP,IAAI,CAAC,EAAE;QACzC;MACF;QACEI,MAAM,GAAGR,UAAU,CAACW,SAAS,CAACP,IAAI,CAAC;QACnC;IACJ;IAEA,OAAOD,eAAe,CAACF,wBAAwB,CAACO,MAAM,CAAC,CAAC;EAC1D,CAAC,CAAC;AACJ;;AAEA;AACA,OAAO,SAASI,mBAAmBA,CAAA,EAAoC;EACrE,OAAOb,IAAI,CAACc,aAAa,CAAC,CAAC;AAC7B","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-policy.test.d.ts","sourceRoot":"","sources":["../../src/name-policy.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { isValidCSharpIdentifier, sanitizeCSharpIdentifier } from "./identifier-utils.js";
|
|
3
|
+
import { csharpContextualKeywords, csharpKeywords, isCSharpContextualKeyword, isCSharpKeyword } from "./keywords.js";
|
|
4
|
+
import { createCSharpNamePolicy } from "./name-policy.js";
|
|
5
|
+
describe("isCSharpKeyword", () => {
|
|
6
|
+
it("recognizes reserved keywords", () => {
|
|
7
|
+
expect(isCSharpKeyword("class")).toBe(true);
|
|
8
|
+
expect(isCSharpKeyword("interface")).toBe(true);
|
|
9
|
+
expect(isCSharpKeyword("string")).toBe(true);
|
|
10
|
+
expect(isCSharpKeyword("int")).toBe(true);
|
|
11
|
+
expect(isCSharpKeyword("void")).toBe(true);
|
|
12
|
+
expect(isCSharpKeyword("return")).toBe(true);
|
|
13
|
+
});
|
|
14
|
+
it("does not match contextual keywords", () => {
|
|
15
|
+
expect(isCSharpKeyword("async")).toBe(false);
|
|
16
|
+
expect(isCSharpKeyword("value")).toBe(false);
|
|
17
|
+
expect(isCSharpKeyword("var")).toBe(false);
|
|
18
|
+
expect(isCSharpKeyword("record")).toBe(false);
|
|
19
|
+
});
|
|
20
|
+
it("is case-sensitive — PascalCase versions are not keywords", () => {
|
|
21
|
+
expect(isCSharpKeyword("Class")).toBe(false);
|
|
22
|
+
expect(isCSharpKeyword("String")).toBe(false);
|
|
23
|
+
expect(isCSharpKeyword("Int")).toBe(false);
|
|
24
|
+
expect(isCSharpKeyword("Void")).toBe(false);
|
|
25
|
+
});
|
|
26
|
+
it("rejects non-keywords", () => {
|
|
27
|
+
expect(isCSharpKeyword("MyClass")).toBe(false);
|
|
28
|
+
expect(isCSharpKeyword("foo")).toBe(false);
|
|
29
|
+
});
|
|
30
|
+
it("keyword sets are non-empty", () => {
|
|
31
|
+
expect(csharpKeywords.size).toBeGreaterThan(70);
|
|
32
|
+
expect(csharpContextualKeywords.size).toBeGreaterThan(30);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe("isCSharpContextualKeyword", () => {
|
|
36
|
+
it("recognizes contextual keywords", () => {
|
|
37
|
+
expect(isCSharpContextualKeyword("async")).toBe(true);
|
|
38
|
+
expect(isCSharpContextualKeyword("await")).toBe(true);
|
|
39
|
+
expect(isCSharpContextualKeyword("value")).toBe(true);
|
|
40
|
+
expect(isCSharpContextualKeyword("var")).toBe(true);
|
|
41
|
+
expect(isCSharpContextualKeyword("record")).toBe(true);
|
|
42
|
+
expect(isCSharpContextualKeyword("required")).toBe(true);
|
|
43
|
+
});
|
|
44
|
+
it("does not match reserved keywords", () => {
|
|
45
|
+
expect(isCSharpContextualKeyword("class")).toBe(false);
|
|
46
|
+
expect(isCSharpContextualKeyword("int")).toBe(false);
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
describe("isValidCSharpIdentifier", () => {
|
|
50
|
+
it("accepts valid identifiers", () => {
|
|
51
|
+
expect(isValidCSharpIdentifier("MyClass")).toBe(true);
|
|
52
|
+
expect(isValidCSharpIdentifier("_private")).toBe(true);
|
|
53
|
+
expect(isValidCSharpIdentifier("name123")).toBe(true);
|
|
54
|
+
expect(isValidCSharpIdentifier("a")).toBe(true);
|
|
55
|
+
expect(isValidCSharpIdentifier("_")).toBe(true);
|
|
56
|
+
});
|
|
57
|
+
it("rejects invalid identifiers", () => {
|
|
58
|
+
expect(isValidCSharpIdentifier("123start")).toBe(false);
|
|
59
|
+
expect(isValidCSharpIdentifier("has-dash")).toBe(false);
|
|
60
|
+
expect(isValidCSharpIdentifier("has space")).toBe(false);
|
|
61
|
+
expect(isValidCSharpIdentifier("")).toBe(false);
|
|
62
|
+
expect(isValidCSharpIdentifier("foo.bar")).toBe(false);
|
|
63
|
+
});
|
|
64
|
+
it("does not check for keywords (only character rules)", () => {
|
|
65
|
+
// "class" has valid characters, even though it's a keyword
|
|
66
|
+
expect(isValidCSharpIdentifier("class")).toBe(true);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe("sanitizeCSharpIdentifier", () => {
|
|
70
|
+
it("passes through valid identifiers unchanged", () => {
|
|
71
|
+
expect(sanitizeCSharpIdentifier("ValidName")).toBe("ValidName");
|
|
72
|
+
expect(sanitizeCSharpIdentifier("_private")).toBe("_private");
|
|
73
|
+
expect(sanitizeCSharpIdentifier("name123")).toBe("name123");
|
|
74
|
+
});
|
|
75
|
+
it("prefixes underscore when first char is a digit", () => {
|
|
76
|
+
expect(sanitizeCSharpIdentifier("1foo")).toBe("_1foo");
|
|
77
|
+
});
|
|
78
|
+
it("replaces non-word characters with underscore", () => {
|
|
79
|
+
expect(sanitizeCSharpIdentifier("foo-bar")).toBe("foo_bar");
|
|
80
|
+
expect(sanitizeCSharpIdentifier("has space")).toBe("has_space");
|
|
81
|
+
expect(sanitizeCSharpIdentifier("a.b.c")).toBe("a_b_c");
|
|
82
|
+
});
|
|
83
|
+
it("handles leading special characters", () => {
|
|
84
|
+
expect(sanitizeCSharpIdentifier("$foo")).toBe("_foo");
|
|
85
|
+
expect(sanitizeCSharpIdentifier("-bar")).toBe("_bar");
|
|
86
|
+
});
|
|
87
|
+
it("handles empty string", () => {
|
|
88
|
+
expect(sanitizeCSharpIdentifier("")).toBe("_");
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe("createCSharpNamePolicy keyword escaping", () => {
|
|
92
|
+
const policy = createCSharpNamePolicy();
|
|
93
|
+
describe("PascalCase elements avoid most keyword conflicts naturally", () => {
|
|
94
|
+
it("class element: 'string' becomes 'String' (not a keyword, no escape)", () => {
|
|
95
|
+
expect(policy.getName("string", "class")).toBe("String");
|
|
96
|
+
});
|
|
97
|
+
it("class element: 'class' becomes 'Class' (not a keyword, no escape)", () => {
|
|
98
|
+
expect(policy.getName("class", "class")).toBe("Class");
|
|
99
|
+
});
|
|
100
|
+
it("class-property element: 'value' becomes 'Value' (not a keyword, no escape)", () => {
|
|
101
|
+
expect(policy.getName("value", "class-property")).toBe("Value");
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
describe("camelCase elements may hit keywords and get @-escaped", () => {
|
|
105
|
+
it("parameter: 'string' stays 'string' → gets @-escaped", () => {
|
|
106
|
+
expect(policy.getName("string", "parameter")).toBe("@string");
|
|
107
|
+
});
|
|
108
|
+
it("variable: 'int' stays 'int' → gets @-escaped", () => {
|
|
109
|
+
expect(policy.getName("int", "variable")).toBe("@int");
|
|
110
|
+
});
|
|
111
|
+
it("parameter: 'return' stays 'return' → gets @-escaped", () => {
|
|
112
|
+
expect(policy.getName("return", "parameter")).toBe("@return");
|
|
113
|
+
});
|
|
114
|
+
it("variable: 'value' stays 'value' — contextual keyword, not escaped", () => {
|
|
115
|
+
expect(policy.getName("value", "variable")).toBe("value");
|
|
116
|
+
});
|
|
117
|
+
it("parameter: 'async' stays 'async' — contextual keyword, not escaped", () => {
|
|
118
|
+
expect(policy.getName("async", "parameter")).toBe("async");
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe("non-keyword names pass through normally", () => {
|
|
122
|
+
it("parameter: 'myParam' stays 'myParam'", () => {
|
|
123
|
+
expect(policy.getName("myParam", "parameter")).toBe("myParam");
|
|
124
|
+
});
|
|
125
|
+
it("class: 'my-model' becomes 'MyModel'", () => {
|
|
126
|
+
expect(policy.getName("my-model", "class")).toBe("MyModel");
|
|
127
|
+
});
|
|
128
|
+
it("parameter: 'some-param' becomes 'someParam'", () => {
|
|
129
|
+
expect(policy.getName("some-param", "parameter")).toBe("someParam");
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
describe("namespace handling", () => {
|
|
133
|
+
it("applies PascalCase", () => {
|
|
134
|
+
expect(policy.getName("my-service", "namespace")).toBe("MyService");
|
|
135
|
+
});
|
|
136
|
+
it("single segment works", () => {
|
|
137
|
+
expect(policy.getName("system", "namespace")).toBe("System");
|
|
138
|
+
});
|
|
139
|
+
it("escapes keyword segments", () => {
|
|
140
|
+
// "namespace" as a namespace segment → PascalCase → "Namespace" → not a keyword
|
|
141
|
+
expect(policy.getName("namespace", "namespace")).toBe("Namespace");
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
describe("constant and private member escaping", () => {
|
|
145
|
+
it("constant: 'class' becomes 'CLASS' (not a keyword)", () => {
|
|
146
|
+
expect(policy.getName("class", "constant")).toBe("CLASS");
|
|
147
|
+
});
|
|
148
|
+
it("class-member-private: 'value' becomes '_value' (not a keyword)", () => {
|
|
149
|
+
expect(policy.getName("value", "class-member-private")).toBe("_value");
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
describe("identifier sanitization", () => {
|
|
153
|
+
it("sanitizes names starting with digits", () => {
|
|
154
|
+
expect(policy.getName("123foo", "class")).toBe("_123foo");
|
|
155
|
+
});
|
|
156
|
+
it("sanitizes names starting with digits for camelCase elements", () => {
|
|
157
|
+
expect(policy.getName("123param", "parameter")).toBe("_123param");
|
|
158
|
+
});
|
|
159
|
+
it("sanitizes empty string", () => {
|
|
160
|
+
expect(policy.getName("", "class")).toBe("_");
|
|
161
|
+
});
|
|
162
|
+
it("sanitizes namespace starting with digits", () => {
|
|
163
|
+
expect(policy.getName("123service", "namespace")).toBe("_123service");
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=name-policy.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","expect","it","isValidCSharpIdentifier","sanitizeCSharpIdentifier","csharpContextualKeywords","csharpKeywords","isCSharpContextualKeyword","isCSharpKeyword","createCSharpNamePolicy","toBe","size","toBeGreaterThan","policy","getName"],"sources":["../../src/name-policy.test.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|