@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.
Files changed (54) hide show
  1. package/dist/dev/src/components/method/method.test.js +64 -0
  2. package/dist/dev/src/components/method/method.test.js.map +1 -1
  3. package/dist/dev/src/identifier-utils.js +45 -0
  4. package/dist/dev/src/identifier-utils.js.map +1 -0
  5. package/dist/dev/src/index.js +2 -0
  6. package/dist/dev/src/index.js.map +1 -1
  7. package/dist/dev/src/keywords.js +39 -0
  8. package/dist/dev/src/keywords.js.map +1 -0
  9. package/dist/dev/src/name-policy.js +29 -6
  10. package/dist/dev/src/name-policy.js.map +1 -1
  11. package/dist/dev/src/name-policy.test.js +167 -0
  12. package/dist/dev/src/name-policy.test.js.map +1 -0
  13. package/dist/src/components/method/method.test.js +48 -0
  14. package/dist/src/components/method/method.test.js.map +1 -1
  15. package/dist/src/identifier-utils.d.ts +22 -0
  16. package/dist/src/identifier-utils.d.ts.map +1 -0
  17. package/dist/src/identifier-utils.js +45 -0
  18. package/dist/src/identifier-utils.js.map +1 -0
  19. package/dist/src/index.d.ts +2 -0
  20. package/dist/src/index.d.ts.map +1 -1
  21. package/dist/src/index.js +2 -0
  22. package/dist/src/index.js.map +1 -1
  23. package/dist/src/keywords.d.ts +32 -0
  24. package/dist/src/keywords.d.ts.map +1 -0
  25. package/dist/src/keywords.js +39 -0
  26. package/dist/src/keywords.js.map +1 -0
  27. package/dist/src/name-policy.d.ts +7 -0
  28. package/dist/src/name-policy.d.ts.map +1 -1
  29. package/dist/src/name-policy.js +29 -6
  30. package/dist/src/name-policy.js.map +1 -1
  31. package/dist/src/name-policy.test.d.ts +2 -0
  32. package/dist/src/name-policy.test.d.ts.map +1 -0
  33. package/dist/src/name-policy.test.js +167 -0
  34. package/dist/src/name-policy.test.js.map +1 -0
  35. package/dist/tsconfig.tsbuildinfo +1 -1
  36. package/docs/api/contexts/csharp-context.md +21 -0
  37. package/docs/api/contexts/index.md +3 -0
  38. package/docs/api/functions/createCSharpNamePolicy.md +4 -0
  39. package/docs/api/functions/index.md +5 -1
  40. package/docs/api/functions/isCSharpContextualKeyword.md +20 -0
  41. package/docs/api/functions/isCSharpKeyword.md +22 -0
  42. package/docs/api/functions/isValidCSharpIdentifier.md +20 -0
  43. package/docs/api/functions/sanitizeCSharpIdentifier.md +24 -0
  44. package/docs/api/index.md +3 -2
  45. package/docs/api/variables/csharpKeywords.md +11 -0
  46. package/docs/api/variables/index.md +1 -0
  47. package/package.json +3 -3
  48. package/src/components/method/method.test.tsx +36 -0
  49. package/src/identifier-utils.ts +45 -0
  50. package/src/index.ts +2 -0
  51. package/src/keywords.ts +162 -0
  52. package/src/name-policy.test.ts +210 -0
  53. package/src/name-policy.ts +30 -6
  54. package/temp/api.json +237 -1
@@ -355,4 +355,68 @@ describe("format", () => {
355
355
  `);
356
356
  });
357
357
  });
358
+ describe("name policy deduplication", () => {
359
+ it("deduplicates parameters that collide after case conversion", () => {
360
+ const params = [{
361
+ name: "my-param",
362
+ type: "int"
363
+ }, {
364
+ name: "myParam",
365
+ type: "string"
366
+ }];
367
+ expect(_$createComponent(Wrapper, {
368
+ get children() {
369
+ return _$createComponent(Method, {
370
+ "public": true,
371
+ name: "MethodOne",
372
+ parameters: params
373
+ }, {
374
+ fileName: import.meta.url,
375
+ lineNumber: 219,
376
+ columnNumber: 9
377
+ });
378
+ }
379
+ }, {
380
+ fileName: import.meta.url,
381
+ lineNumber: 218,
382
+ columnNumber: 7
383
+ })).toRenderTo(`
384
+ public class TestClass
385
+ {
386
+ public void MethodOne(int myParam, string myParam_2) {}
387
+ }
388
+ `);
389
+ });
390
+ it("deduplicates parameters that are keywords", () => {
391
+ const params = [{
392
+ name: "string",
393
+ type: "int"
394
+ }, {
395
+ name: "string",
396
+ type: "bool"
397
+ }];
398
+ expect(_$createComponent(Wrapper, {
399
+ get children() {
400
+ return _$createComponent(Method, {
401
+ "public": true,
402
+ name: "MethodOne",
403
+ parameters: params
404
+ }, {
405
+ fileName: import.meta.url,
406
+ lineNumber: 236,
407
+ columnNumber: 9
408
+ });
409
+ }
410
+ }, {
411
+ fileName: import.meta.url,
412
+ lineNumber: 235,
413
+ columnNumber: 7
414
+ })).toRenderTo(`
415
+ public class TestClass
416
+ {
417
+ public void MethodOne(int @string, bool string_2) {}
418
+ }
419
+ `);
420
+ });
421
+ });
358
422
  //# sourceMappingURL=method.test.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["describe","expect","it","TestNamespace","ClassDeclaration","Method","Wrapper","props","_$createComponent","children","name","fileName","import","meta","url","lineNumber","columnNumber","each","accessModifier","_$mergeProps","toRenderTo","methodModifier","abstract","async","returns","params","type","res","parameters","doc","expression","printWidth","override"],"sources":["../../../../../src/components/method/method.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["describe","expect","it","TestNamespace","ClassDeclaration","Method","Wrapper","props","_$createComponent","children","name","fileName","import","meta","url","lineNumber","columnNumber","each","accessModifier","_$mergeProps","toRenderTo","methodModifier","abstract","async","returns","params","type","res","parameters","doc","expression","printWidth","override"],"sources":["../../../../../src/components/method/method.test.tsx"],"sourcesContent":[null],"mappings":";AACA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ,QAAQ;AAC7C,SAASC,aAAa;AACtB,SAASC,gBAAgB,EAAEC,MAAM,QAAQ,gBAAgB;AAEzD,MAAMC,OAAO,GAAIC,KAA6B,IAAAC,iBAAA,CAC3CL,aAAa;EAAA,IAAAM,SAAA;IAAA,OAAAD,iBAAA,CACXJ,gBAAgB;MAAA;MAAQM,IAAI;MAAA,IAAAD,SAAA;QAAA,OAC1BF,KAAK,CAACE,QAAQ;MAAA;IAAA;MAAAE,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA;EAAA;AAAA;EAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;EAAAC,UAAA;EAAAC,YAAA;AAAA,EAGpB;AAEDhB,QAAQ,CAAC,WAAW,EAAE,MAAM;EAC1BA,QAAQ,CAAC,kBAAkB,EAAE,MAAM;IACjCE,EAAE,CAACe,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAU,CAAC,CAC9D,IAAI,EACHC,cAAc,IAAK;MAClBjB,MAAM,CAAAO,iBAAA,CACHF,OAAO;QAAA,IAAAG,SAAA;UAAA,OAAAD,iBAAA,CACLH,MAAM,EAAAc,YAAA,CAAK;YAAE,CAACD,cAAc,GAAG;UAAK,CAAC;YAAER,IAAI;UAAA;YAAAC,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA;QAAA;MAAA;QAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,EAEhD,CAAC,CAACI,UAAU,CAAC;AACrB;AACA;AACA,cAAcF,cAAc;AAC5B;AACA,OAAO,CAAC;IACF,CACF,CAAC;EACH,CAAC,CAAC;EAEFlB,QAAQ,CAAC,kBAAkB,EAAE,MAAM;IACjCE,EAAE,CAACe,IAAI,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC,CAC/C,IAAI,EACHI,cAAc,IAAK;MAClBpB,MAAM,CAAAO,iBAAA,CACHF,OAAO;QAAA,IAAAG,SAAA;UAAA,OAAAD,iBAAA,CACLH,MAAM,EAAAc,YAAA,CAAK;YAAE,CAACE,cAAc,GAAG;UAAK,CAAC;YAAEX,IAAI;UAAA;YAAAC,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA;QAAA;MAAA;QAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,EAEhD,CAAC,CAACI,UAAU,CAAC;AACrB;AACA;AACA,cAAcC,cAAc;AAC5B;AACA,OAAO,CAAC;IACF,CACF,CAAC;IAEDnB,EAAE,CAAC,uBAAuB,EAAE,MAAM;MAChCD,MAAM,CAAAO,iBAAA,CACHF,OAAO;QAAA,IAAAG,SAAA;UAAA,OAAAD,iBAAA,CACLH,MAAM;YAACiB,QAAQ;YAACZ,IAAI;UAAA;YAAAC,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA;QAAA;MAAA;QAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,EAEzB,CAAC,CAACI,UAAU,CAAC;AACnB;AACA;AACA;AACA;AACA,OAAO,CAAC;IACJ,CAAC,CAAC;EACJ,CAAC,CAAC;EAEFlB,EAAE,CAAC,mBAAmB,EAAE,MAAM;IAC5BD,MAAM,CAAAO,iBAAA,CACHF,OAAO;MAAA,IAAAG,SAAA;QAAA,OAAAD,iBAAA,CACLH,MAAM;UAACkB,KAAK;UAACb,IAAI;QAAA;UAAAC,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA;MAAA;IAAA;MAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,EAEtB,CAAC,CAACI,UAAU,CAAC;AACjB;AACA;AACA;AACA;AACA,OAAO,CAAC;EACN,CAAC,CAAC;EAEFlB,EAAE,CAAC,mBAAmB,EAAE,MAAM;IAC5BD,MAAM,CAAAO,iBAAA,CACHF,OAAO;MAAA,IAAAG,SAAA;QAAA,OAAAD,iBAAA,CACLH,MAAM;UAACkB,KAAK;UAACC,OAAO;UAAA;UAAeF,QAAQ;UAACZ,IAAI;QAAA;UAAAC,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA;MAAA;IAAA;MAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,EAErD,CAAC,CAACI,UAAU,CAAC;AACjB;AACA;AACA;AACA;AACA,OAAO,CAAC;EACN,CAAC,CAAC;AACJ,CAAC,CAAC;AAEFlB,EAAE,CAAC,kCAAkC,EAAE,MAAM;EAC3CD,MAAM,CAAAO,iBAAA,CACHF,OAAO;IAAA,IAAAG,SAAA;MAAA,OAAAD,iBAAA,CACLH,MAAM;QAACK,IAAI;MAAA;QAAAC,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA;IAAA;EAAA;IAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;IAAAC,UAAA;IAAAC,YAAA;EAAA,EAEhB,CAAC,CAACI,UAAU,CAAC;AACf;AACA;AACA;AACA;AACA,CAAC,CAAC;AACF,CAAC,CAAC;AACFlB,EAAE,CAAC,gCAAgC,EAAE,MAAM;EACzC,MAAMuB,MAAM,GAAG,CACb;IACEf,IAAI,EAAE,UAAU;IAChBgB,IAAI,EAAE;EACR,CAAC,EACD;IACEhB,IAAI,EAAE,aAAa;IACnBgB,IAAI,EAAE;EACR,CAAC,CACF;EACD,MAAMC,GAAG,GAAAnB,iBAAA,CACNF,OAAO;IAAA,IAAAG,SAAA;MAAA,OAAAD,iBAAA,CACLH,MAAM;QAAA;QAAQK,IAAI;QAAakB,UAAU,EAAEH,MAAM;QAAED,OAAO;MAAA;QAAAb,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA;IAAA;EAAA;IAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;IAAAC,UAAA;IAAAC,YAAA;EAAA,EAE9D;EAEDf,MAAM,CAAC0B,GAAG,CAAC,CAACP,UAAU,CAAC;AACzB;AACA;AACA;AACA;AACA,GAAG,CAAC;AACJ,CAAC,CAAC;AAEFlB,EAAE,CAAC,qBAAqB,EAAE,MAAM;EAC9BD,MAAM,CAAAO,iBAAA,CACHL,aAAa;IAAA,IAAAM,SAAA;MAAA,OAAAD,iBAAA,CACXJ,gBAAgB;QAACM,IAAI;QAAA,IAAAD,SAAA;UAAA,OAAAD,iBAAA,CACnBH,MAAM;YAACK,IAAI;YAAUmB,GAAG;UAAA;YAAAlB,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA;QAAA;MAAA;QAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA;IAAA;EAAA;IAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;IAAAC,UAAA;IAAAC,YAAA;EAAA,EAG/B,CAAC,CAACI,UAAU,CAAC;AACf;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;AACJ,CAAC,CAAC;AAEFlB,EAAE,CAAC,0BAA0B,EAAE,MAAM;EACnCD,MAAM,CAAAO,iBAAA,CACHL,aAAa;IAAA,IAAAM,SAAA;MAAA,OAAAD,iBAAA,CACXJ,gBAAgB;QAACM,IAAI;QAAA,IAAAD,SAAA;UAAA,OAAAD,iBAAA,CACnBH,MAAM;YAACK,IAAI;YAAUmB,GAAG;YAAkBC,UAAU;YAAArB,QAAA;UAAA;YAAAE,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA;QAAA;MAAA;QAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA;IAAA;EAAA;IAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;IAAAC,UAAA;IAAAC,YAAA;EAAA,EAK3D,CAAC,CAACI,UAAU,CAAC;AACf;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;AACJ,CAAC,CAAC;AAEFpB,QAAQ,CAAC,QAAQ,EAAE,MAAM;EACvBE,EAAE,CAAC,uCAAuC,EAAE,MAAM;IAChDD,MAAM,CAAAO,iBAAA,CACHL,aAAa;MAAC4B,UAAU,EAAE,EAAE;MAAA,IAAAtB,SAAA;QAAA,OAAAD,iBAAA,CAC1BJ,gBAAgB;UAACM,IAAI;UAAA,IAAAD,SAAA;YAAA,OAAAD,iBAAA,CACnBH,MAAM;cAAA;cAAQ2B,QAAQ;cAACtB,IAAI;cAA6BoB,UAAU;cAAArB,QAAA;YAAA;cAAAE,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA;UAAA;QAAA;UAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA;MAAA;IAAA;MAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,EAKzE,CAAC,CAACI,UAAU,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;EACF,CAAC,CAAC;EAEFlB,EAAE,CAAC,oCAAoC,EAAE,MAAM;IAC7CD,MAAM,CAAAO,iBAAA,CACHL,aAAa;MAAC4B,UAAU,EAAE,EAAE;MAAA,IAAAtB,SAAA;QAAA,OAAAD,iBAAA,CAC1BJ,gBAAgB;UAACM,IAAI;UAAA,IAAAD,SAAA;YAAA,OAAAD,iBAAA,CACnBH,MAAM;cAAA;cAEL2B,QAAQ;cACRtB,IAAI;cACJoB,UAAU;cACVF,UAAU,EAAE,CACV;gBAAElB,IAAI,EAAE,gBAAgB;gBAAEgB,IAAI,EAAE;cAAM,CAAC,EACvC;gBAAEhB,IAAI,EAAE,iBAAiB;gBAAEgB,IAAI,EAAE;cAAS,CAAC,CAC5C;cAAAjB,QAAA;YAAA;cAAAE,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;cAAAC,UAAA;cAAAC,YAAA;YAAA;UAAA;QAAA;UAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA;MAAA;IAAA;MAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,EAMT,CAAC,CAACI,UAAU,CAAC;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,CAAC;EACF,CAAC,CAAC;AACJ,CAAC,CAAC;AAEFpB,QAAQ,CAAC,2BAA2B,EAAE,MAAM;EAC1CE,EAAE,CAAC,4DAA4D,EAAE,MAAM;IACrE,MAAMuB,MAAM,GAAG,CACb;MAAEf,IAAI,EAAE,UAAU;MAAEgB,IAAI,EAAE;IAAM,CAAC,EACjC;MAAEhB,IAAI,EAAE,SAAS;MAAEgB,IAAI,EAAE;IAAS,CAAC,CACpC;IACDzB,MAAM,CAAAO,iBAAA,CACHF,OAAO;MAAA,IAAAG,SAAA;QAAA,OAAAD,iBAAA,CACLH,MAAM;UAAA;UAAQK,IAAI;UAAakB,UAAU,EAAEH;QAAM;UAAAd,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA;MAAA;IAAA;MAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,EAEtD,CAAC,CAACI,UAAU,CAAC;AACjB;AACA;AACA;AACA;AACA,KAAK,CAAC;EACJ,CAAC,CAAC;EAEFlB,EAAE,CAAC,2CAA2C,EAAE,MAAM;IACpD,MAAMuB,MAAM,GAAG,CACb;MAAEf,IAAI,EAAE,QAAQ;MAAEgB,IAAI,EAAE;IAAM,CAAC,EAC/B;MAAEhB,IAAI,EAAE,QAAQ;MAAEgB,IAAI,EAAE;IAAO,CAAC,CACjC;IACDzB,MAAM,CAAAO,iBAAA,CACHF,OAAO;MAAA,IAAAG,SAAA;QAAA,OAAAD,iBAAA,CACLH,MAAM;UAAA;UAAQK,IAAI;UAAakB,UAAU,EAAEH;QAAM;UAAAd,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA;MAAA;IAAA;MAAAL,QAAA,EAAAC,MAAA,CAAAC,IAAA,CAAAC,GAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,EAEtD,CAAC,CAACI,UAAU,CAAC;AACjB;AACA;AACA;AACA;AACA,KAAK,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Checks whether the provided name is a valid C# identifier (without `@` prefix).
3
+ * Does not account for keyword conflicts — use {@link isCSharpKeyword} for that.
4
+ *
5
+ * @param name - The name to validate.
6
+ * @returns true if the name matches C# identifier rules (letter or underscore start, word chars after).
7
+ */
8
+ export function isValidCSharpIdentifier(name) {
9
+ return /^[A-Za-z_]\w*$/.test(name);
10
+ }
11
+
12
+ /**
13
+ * Transforms an arbitrary string into a valid C# identifier by replacing
14
+ * invalid characters. The result may still be a C# keyword — callers
15
+ * should combine with keyword escaping if needed.
16
+ *
17
+ * - If the first character is not a letter or underscore, a `_` prefix is added.
18
+ * - Subsequent non-word characters are replaced with `_`.
19
+ * - Empty strings become `_`.
20
+ *
21
+ * @param name - The string to sanitize.
22
+ * @returns A string that satisfies C# identifier character rules.
23
+ */
24
+ export function sanitizeCSharpIdentifier(name) {
25
+ if (name.length === 0) return "_";
26
+ const chars = [];
27
+ for (let i = 0; i < name.length; i++) {
28
+ const ch = name[i];
29
+ if (i === 0) {
30
+ if (/[A-Za-z_]/.test(ch)) {
31
+ chars.push(ch);
32
+ } else {
33
+ chars.push("_");
34
+ // Keep the original char if it's a word char (e.g., digit)
35
+ if (/\w/.test(ch)) {
36
+ chars.push(ch);
37
+ }
38
+ }
39
+ } else {
40
+ chars.push(/\w/.test(ch) ? ch : "_");
41
+ }
42
+ }
43
+ return chars.join("");
44
+ }
45
+ //# sourceMappingURL=identifier-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isValidCSharpIdentifier","name","test","sanitizeCSharpIdentifier","length","chars","i","ch","push","join"],"sources":["../../../src/identifier-utils.ts"],"sourcesContent":[null],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,uBAAuBA,CAACC,IAAY,EAAW;EAC7D,OAAO,gBAAgB,CAACC,IAAI,CAACD,IAAI,CAAC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,wBAAwBA,CAACF,IAAY,EAAU;EAC7D,IAAIA,IAAI,CAACG,MAAM,KAAK,CAAC,EAAE,OAAO,GAAG;EAEjC,MAAMC,KAAe,GAAG,EAAE;EAC1B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,IAAI,CAACG,MAAM,EAAEE,CAAC,EAAE,EAAE;IACpC,MAAMC,EAAE,GAAGN,IAAI,CAACK,CAAC,CAAC;IAClB,IAAIA,CAAC,KAAK,CAAC,EAAE;MACX,IAAI,WAAW,CAACJ,IAAI,CAACK,EAAE,CAAC,EAAE;QACxBF,KAAK,CAACG,IAAI,CAACD,EAAE,CAAC;MAChB,CAAC,MAAM;QACLF,KAAK,CAACG,IAAI,CAAC,GAAG,CAAC;QACf;QACA,IAAI,IAAI,CAACN,IAAI,CAACK,EAAE,CAAC,EAAE;UACjBF,KAAK,CAACG,IAAI,CAACD,EAAE,CAAC;QAChB;MACF;IACF,CAAC,MAAM;MACLF,KAAK,CAACG,IAAI,CAAC,IAAI,CAACN,IAAI,CAACK,EAAE,CAAC,GAAGA,EAAE,GAAG,GAAG,CAAC;IACtC;EACF;EACA,OAAOF,KAAK,CAACI,IAAI,CAAC,EAAE,CAAC;AACvB","ignoreList":[]}
@@ -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";
@@ -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,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,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
- // creates the C# naming policy
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
- case "namespace":
21
- return changecase.pascalCase(name);
39
+ result = changecase.pascalCase(name);
40
+ break;
22
41
  case "constant":
23
- return changecase.constantCase(name);
42
+ result = changecase.constantCase(name);
43
+ break;
24
44
  case "class-member-private":
25
- return `_${changecase.camelCase(name)}`;
45
+ result = `_${changecase.camelCase(name)}`;
46
+ break;
26
47
  default:
27
- return changecase.camelCase(name);
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","createCSharpNamePolicy","createNamePolicy","name","element","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;;AAEzC;;AAmBA;AACA,OAAO,SAASC,sBAAsBA,CAAA,EAAoC;EACxE,OAAOF,IAAI,CAACG,gBAAgB,CAAC,CAACC,IAAI,EAAEC,OAAO,KAAK;IAC9C,QAAQA,OAAO;MACb,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;MACrB,KAAK,WAAW;QACd,OAAOJ,UAAU,CAACK,UAAU,CAACF,IAAI,CAAC;MACpC,KAAK,UAAU;QACb,OAAOH,UAAU,CAACM,YAAY,CAACH,IAAI,CAAC;MACtC,KAAK,sBAAsB;QACzB,OAAO,IAAIH,UAAU,CAACO,SAAS,CAACJ,IAAI,CAAC,EAAE;MACzC;QACE,OAAOH,UAAU,CAACO,SAAS,CAACJ,IAAI,CAAC;IACrC;EACF,CAAC,CAAC;AACJ;;AAEA;AACA,OAAO,SAASK,mBAAmBA,CAAA,EAAoC;EACrE,OAAOT,IAAI,CAACU,aAAa,CAAC,CAAC;AAC7B","ignoreList":[]}
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,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":[]}
@@ -243,4 +243,52 @@ describe("format", () => {
243
243
  `);
244
244
  });
245
245
  });
246
+ describe("name policy deduplication", () => {
247
+ it("deduplicates parameters that collide after case conversion", () => {
248
+ const params = [{
249
+ name: "my-param",
250
+ type: "int"
251
+ }, {
252
+ name: "myParam",
253
+ type: "string"
254
+ }];
255
+ expect(_$createComponent(Wrapper, {
256
+ get children() {
257
+ return _$createComponent(Method, {
258
+ "public": true,
259
+ name: "MethodOne",
260
+ parameters: params
261
+ });
262
+ }
263
+ })).toRenderTo(`
264
+ public class TestClass
265
+ {
266
+ public void MethodOne(int myParam, string myParam_2) {}
267
+ }
268
+ `);
269
+ });
270
+ it("deduplicates parameters that are keywords", () => {
271
+ const params = [{
272
+ name: "string",
273
+ type: "int"
274
+ }, {
275
+ name: "string",
276
+ type: "bool"
277
+ }];
278
+ expect(_$createComponent(Wrapper, {
279
+ get children() {
280
+ return _$createComponent(Method, {
281
+ "public": true,
282
+ name: "MethodOne",
283
+ parameters: params
284
+ });
285
+ }
286
+ })).toRenderTo(`
287
+ public class TestClass
288
+ {
289
+ public void MethodOne(int @string, bool string_2) {}
290
+ }
291
+ `);
292
+ });
293
+ });
246
294
  //# sourceMappingURL=method.test.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["describe","expect","it","TestNamespace","ClassDeclaration","Method","Wrapper","props","_$createComponent","children","name","each","accessModifier","_$mergeProps","toRenderTo","methodModifier","abstract","async","returns","params","type","res","parameters","doc","expression","printWidth","override"],"sources":["../../../../src/components/method/method.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["describe","expect","it","TestNamespace","ClassDeclaration","Method","Wrapper","props","_$createComponent","children","name","each","accessModifier","_$mergeProps","toRenderTo","methodModifier","abstract","async","returns","params","type","res","parameters","doc","expression","printWidth","override"],"sources":["../../../../src/components/method/method.test.tsx"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Checks whether the provided name is a valid C# identifier (without `@` prefix).
3
+ * Does not account for keyword conflicts — use {@link isCSharpKeyword} for that.
4
+ *
5
+ * @param name - The name to validate.
6
+ * @returns true if the name matches C# identifier rules (letter or underscore start, word chars after).
7
+ */
8
+ export declare function isValidCSharpIdentifier(name: string): boolean;
9
+ /**
10
+ * Transforms an arbitrary string into a valid C# identifier by replacing
11
+ * invalid characters. The result may still be a C# keyword — callers
12
+ * should combine with keyword escaping if needed.
13
+ *
14
+ * - If the first character is not a letter or underscore, a `_` prefix is added.
15
+ * - Subsequent non-word characters are replaced with `_`.
16
+ * - Empty strings become `_`.
17
+ *
18
+ * @param name - The string to sanitize.
19
+ * @returns A string that satisfies C# identifier character rules.
20
+ */
21
+ export declare function sanitizeCSharpIdentifier(name: string): string;
22
+ //# sourceMappingURL=identifier-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identifier-utils.d.ts","sourceRoot":"","sources":["../../src/identifier-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqB7D"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Checks whether the provided name is a valid C# identifier (without `@` prefix).
3
+ * Does not account for keyword conflicts — use {@link isCSharpKeyword} for that.
4
+ *
5
+ * @param name - The name to validate.
6
+ * @returns true if the name matches C# identifier rules (letter or underscore start, word chars after).
7
+ */
8
+ export function isValidCSharpIdentifier(name) {
9
+ return /^[A-Za-z_]\w*$/.test(name);
10
+ }
11
+
12
+ /**
13
+ * Transforms an arbitrary string into a valid C# identifier by replacing
14
+ * invalid characters. The result may still be a C# keyword — callers
15
+ * should combine with keyword escaping if needed.
16
+ *
17
+ * - If the first character is not a letter or underscore, a `_` prefix is added.
18
+ * - Subsequent non-word characters are replaced with `_`.
19
+ * - Empty strings become `_`.
20
+ *
21
+ * @param name - The string to sanitize.
22
+ * @returns A string that satisfies C# identifier character rules.
23
+ */
24
+ export function sanitizeCSharpIdentifier(name) {
25
+ if (name.length === 0) return "_";
26
+ const chars = [];
27
+ for (let i = 0; i < name.length; i++) {
28
+ const ch = name[i];
29
+ if (i === 0) {
30
+ if (/[A-Za-z_]/.test(ch)) {
31
+ chars.push(ch);
32
+ } else {
33
+ chars.push("_");
34
+ // Keep the original char if it's a word char (e.g., digit)
35
+ if (/\w/.test(ch)) {
36
+ chars.push(ch);
37
+ }
38
+ }
39
+ } else {
40
+ chars.push(/\w/.test(ch) ? ch : "_");
41
+ }
42
+ }
43
+ return chars.join("");
44
+ }
45
+ //# sourceMappingURL=identifier-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isValidCSharpIdentifier","name","test","sanitizeCSharpIdentifier","length","chars","i","ch","push","join"],"sources":["../../src/identifier-utils.ts"],"sourcesContent":[null],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,uBAAuBA,CAACC,IAAY,EAAW;EAC7D,OAAO,gBAAgB,CAACC,IAAI,CAACD,IAAI,CAAC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,wBAAwBA,CAACF,IAAY,EAAU;EAC7D,IAAIA,IAAI,CAACG,MAAM,KAAK,CAAC,EAAE,OAAO,GAAG;EAEjC,MAAMC,KAAe,GAAG,EAAE;EAC1B,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGL,IAAI,CAACG,MAAM,EAAEE,CAAC,EAAE,EAAE;IACpC,MAAMC,EAAE,GAAGN,IAAI,CAACK,CAAC,CAAC;IAClB,IAAIA,CAAC,KAAK,CAAC,EAAE;MACX,IAAI,WAAW,CAACJ,IAAI,CAACK,EAAE,CAAC,EAAE;QACxBF,KAAK,CAACG,IAAI,CAACD,EAAE,CAAC;MAChB,CAAC,MAAM;QACLF,KAAK,CAACG,IAAI,CAAC,GAAG,CAAC;QACf;QACA,IAAI,IAAI,CAACN,IAAI,CAACK,EAAE,CAAC,EAAE;UACjBF,KAAK,CAACG,IAAI,CAACD,EAAE,CAAC;QAChB;MACF;IACF,CAAC,MAAM;MACLF,KAAK,CAACG,IAAI,CAAC,IAAI,CAACN,IAAI,CAACK,EAAE,CAAC,GAAGA,EAAE,GAAG,GAAG,CAAC;IACtC;EACF;EACA,OAAOF,KAAK,CAACI,IAAI,CAAC,EAAE,CAAC;AACvB","ignoreList":[]}
@@ -2,6 +2,8 @@ export * from "./access.jsx";
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";