@iris-code/core 0.1.0

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 (94) hide show
  1. package/README.md +38 -0
  2. package/dist/config.d.ts +147 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +550 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/csharp/analyser.d.ts +14 -0
  7. package/dist/csharp/analyser.d.ts.map +1 -0
  8. package/dist/csharp/analyser.js +436 -0
  9. package/dist/csharp/analyser.js.map +1 -0
  10. package/dist/csharp/lexer.d.ts +29 -0
  11. package/dist/csharp/lexer.d.ts.map +1 -0
  12. package/dist/csharp/lexer.js +182 -0
  13. package/dist/csharp/lexer.js.map +1 -0
  14. package/dist/duplicates.d.ts +53 -0
  15. package/dist/duplicates.d.ts.map +1 -0
  16. package/dist/duplicates.js +491 -0
  17. package/dist/duplicates.js.map +1 -0
  18. package/dist/fileAnalyser.d.ts +4 -0
  19. package/dist/fileAnalyser.d.ts.map +1 -0
  20. package/dist/fileAnalyser.js +8 -0
  21. package/dist/fileAnalyser.js.map +1 -0
  22. package/dist/fileNaming.d.ts +68 -0
  23. package/dist/fileNaming.d.ts.map +1 -0
  24. package/dist/fileNaming.js +343 -0
  25. package/dist/fileNaming.js.map +1 -0
  26. package/dist/gate.d.ts +49 -0
  27. package/dist/gate.d.ts.map +1 -0
  28. package/dist/gate.js +242 -0
  29. package/dist/gate.js.map +1 -0
  30. package/dist/go/analyser.d.ts +5 -0
  31. package/dist/go/analyser.d.ts.map +1 -0
  32. package/dist/go/analyser.js +576 -0
  33. package/dist/go/analyser.js.map +1 -0
  34. package/dist/guards.d.ts +16 -0
  35. package/dist/guards.d.ts.map +1 -0
  36. package/dist/guards.js +355 -0
  37. package/dist/guards.js.map +1 -0
  38. package/dist/index.d.ts +22 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +110 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/languages.d.ts +46 -0
  43. package/dist/languages.d.ts.map +1 -0
  44. package/dist/languages.js +155 -0
  45. package/dist/languages.js.map +1 -0
  46. package/dist/lines.d.ts +9 -0
  47. package/dist/lines.d.ts.map +1 -0
  48. package/dist/lines.js +58 -0
  49. package/dist/lines.js.map +1 -0
  50. package/dist/python/analyser.d.ts +5 -0
  51. package/dist/python/analyser.d.ts.map +1 -0
  52. package/dist/python/analyser.js +630 -0
  53. package/dist/python/analyser.js.map +1 -0
  54. package/dist/qualitySignals.d.ts +30 -0
  55. package/dist/qualitySignals.d.ts.map +1 -0
  56. package/dist/qualitySignals.js +101 -0
  57. package/dist/qualitySignals.js.map +1 -0
  58. package/dist/ruby/analyser.d.ts +5 -0
  59. package/dist/ruby/analyser.d.ts.map +1 -0
  60. package/dist/ruby/analyser.js +450 -0
  61. package/dist/ruby/analyser.js.map +1 -0
  62. package/dist/scoring.d.ts +4 -0
  63. package/dist/scoring.d.ts.map +1 -0
  64. package/dist/scoring.js +37 -0
  65. package/dist/scoring.js.map +1 -0
  66. package/dist/secrets.d.ts +5 -0
  67. package/dist/secrets.d.ts.map +1 -0
  68. package/dist/secrets.js +245 -0
  69. package/dist/secrets.js.map +1 -0
  70. package/dist/securityContext.d.ts +2 -0
  71. package/dist/securityContext.d.ts.map +1 -0
  72. package/dist/securityContext.js +16 -0
  73. package/dist/securityContext.js.map +1 -0
  74. package/dist/sfc.d.ts +32 -0
  75. package/dist/sfc.d.ts.map +1 -0
  76. package/dist/sfc.js +228 -0
  77. package/dist/sfc.js.map +1 -0
  78. package/dist/slop.d.ts +37 -0
  79. package/dist/slop.d.ts.map +1 -0
  80. package/dist/slop.js +81 -0
  81. package/dist/slop.js.map +1 -0
  82. package/dist/suppressions.d.ts +19 -0
  83. package/dist/suppressions.d.ts.map +1 -0
  84. package/dist/suppressions.js +152 -0
  85. package/dist/suppressions.js.map +1 -0
  86. package/dist/ts/analyser.d.ts +4 -0
  87. package/dist/ts/analyser.d.ts.map +1 -0
  88. package/dist/ts/analyser.js +769 -0
  89. package/dist/ts/analyser.js.map +1 -0
  90. package/dist/types.d.ts +139 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +46 -0
  93. package/dist/types.js.map +1 -0
  94. package/package.json +43 -0
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformCSharp = transformCSharp;
4
+ exports.stripCSharpComments = stripCSharpComments;
5
+ exports.csharpCodeOnly = csharpCodeOnly;
6
+ /**
7
+ * The C# lexical layer, in its own module because TWO callers need it: the C#
8
+ * analyser (every structural rule) and `detectParseErrorReason` in guards.ts
9
+ * (the delimiter balance check that decides whether a file is analysed at all).
10
+ *
11
+ * That second caller is the reason this is not a private helper. The generic
12
+ * sanitiser treats `\"` as an escaped quote, so the everyday C# verbatim string
13
+ * `@"C:\logs\"` read as UNTERMINATED, every brace after it landed at the wrong
14
+ * depth, and the file was reported as a parse error with all findings zeroed.
15
+ * A Windows path in a verbatim string is not an edge case in C#.
16
+ *
17
+ * ONE scanner serves both "strip comments" and "strip comments and strings":
18
+ * C# has five string forms and keeping two copies of that lexer is how they
19
+ * drift. Both modes are LENGTH-PRESERVING and keep every CR/LF, so a finding's
20
+ * offset still maps to its native line with no remapping layer.
21
+ *
22
+ * Handled forms: line and block comments, char literals, regular ("..." with
23
+ * backslash escapes), verbatim (@"..." where "" is the escape and a backslash is
24
+ * literal), interpolated ($"...", $@"...", @$"..."), and C# 11 raw strings
25
+ * ("""...""", any delimiter length, $-interpolated included). Raw strings are the
26
+ * trap: scanned naively, a `"""` opens and closes on its own first two quotes and
27
+ * every following brace lands in the wrong nesting level.
28
+ */
29
+ function transformCSharp(source, blankStrings) {
30
+ let result = '';
31
+ let i = 0;
32
+ const blank = (ch) => (ch === '\n' ? '\n' : ' ');
33
+ const emit = (ch) => { result += blankStrings ? blank(ch) : ch; };
34
+ while (i < source.length) {
35
+ const ch = source[i];
36
+ if (ch === '/' && source[i + 1] === '/') {
37
+ while (i < source.length && source[i] !== '\n') {
38
+ result += ' ';
39
+ i++;
40
+ }
41
+ continue;
42
+ }
43
+ if (ch === '/' && source[i + 1] === '*') {
44
+ result += ' ';
45
+ i += 2;
46
+ while (i < source.length) {
47
+ if (source[i] === '*' && source[i + 1] === '/') {
48
+ result += ' ';
49
+ i += 2;
50
+ break;
51
+ }
52
+ result += blank(source[i]);
53
+ i++;
54
+ }
55
+ continue;
56
+ }
57
+ if (ch === '"' || ch === '$' || ch === '@') {
58
+ // Read any $ / @ prefix, then the run of quotes that opens the literal.
59
+ let j = i;
60
+ let verbatim = false;
61
+ while (source[j] === '$' || source[j] === '@') {
62
+ if (source[j] === '@')
63
+ verbatim = true;
64
+ j++;
65
+ }
66
+ if (source[j] !== '"') {
67
+ // A bare $ or @: an escaped identifier (@class, @event) or an
68
+ // interpolation hole, neither of which opens a literal.
69
+ result += ch;
70
+ i++;
71
+ continue;
72
+ }
73
+ let quoteRun = 0;
74
+ while (source[j + quoteRun] === '"')
75
+ quoteRun++;
76
+ // Two quotes open an EMPTY regular/verbatim string, not a raw one: only a
77
+ // run of three or more is a raw-string delimiter.
78
+ const openLength = quoteRun >= 3 ? quoteRun : 1;
79
+ // Prefix and opening delimiter are never content, so they are blanked in
80
+ // code mode and preserved in comment-only mode (the SQL interpolation
81
+ // check reads the `$"` marker off that output).
82
+ for (let k = i; k < j + openLength; k++)
83
+ emit(source[k]);
84
+ i = j + openLength;
85
+ if (quoteRun >= 3) {
86
+ // Raw string: ends at the next run of at least `quoteRun` quotes.
87
+ while (i < source.length) {
88
+ if (source[i] === '"') {
89
+ let run = 0;
90
+ while (source[i + run] === '"')
91
+ run++;
92
+ for (let k = 0; k < run; k++)
93
+ emit('"');
94
+ i += run;
95
+ if (run >= quoteRun)
96
+ break;
97
+ continue;
98
+ }
99
+ emit(source[i]);
100
+ i++;
101
+ }
102
+ continue;
103
+ }
104
+ if (verbatim) {
105
+ // Verbatim: "" is the escape, a backslash is literal, newlines are part
106
+ // of the string.
107
+ while (i < source.length) {
108
+ if (source[i] === '"' && source[i + 1] === '"') {
109
+ emit('"');
110
+ emit('"');
111
+ i += 2;
112
+ continue;
113
+ }
114
+ if (source[i] === '"') {
115
+ emit('"');
116
+ i++;
117
+ break;
118
+ }
119
+ emit(source[i]);
120
+ i++;
121
+ }
122
+ continue;
123
+ }
124
+ // Regular or interpolated string. A newline ends it: the file is already
125
+ // broken at that point, and running to EOF would blank the rest of it.
126
+ while (i < source.length) {
127
+ const current = source[i];
128
+ if (current === '\n')
129
+ break;
130
+ if (current === '\\') {
131
+ emit(current);
132
+ i++;
133
+ if (i < source.length && source[i] !== '\n') {
134
+ emit(source[i]);
135
+ i++;
136
+ }
137
+ continue;
138
+ }
139
+ emit(current);
140
+ i++;
141
+ if (current === '"')
142
+ break;
143
+ }
144
+ continue;
145
+ }
146
+ if (ch === "'") {
147
+ emit(ch);
148
+ i++;
149
+ while (i < source.length) {
150
+ const current = source[i];
151
+ if (current === '\n')
152
+ break;
153
+ if (current === '\\') {
154
+ emit(current);
155
+ i++;
156
+ if (i < source.length) {
157
+ emit(source[i]);
158
+ i++;
159
+ }
160
+ continue;
161
+ }
162
+ emit(current);
163
+ i++;
164
+ if (current === "'")
165
+ break;
166
+ }
167
+ continue;
168
+ }
169
+ result += ch;
170
+ i++;
171
+ }
172
+ return result;
173
+ }
174
+ /** Comments blanked, string contents intact. */
175
+ function stripCSharpComments(source) {
176
+ return transformCSharp(source, false);
177
+ }
178
+ /** Comments AND string contents blanked: the input for anything structural. */
179
+ function csharpCodeOnly(source) {
180
+ return transformCSharp(source, true);
181
+ }
182
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/csharp/lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { DuplicateBlockFinding } from './types';
2
+ export interface DuplicateLocation {
3
+ file: string;
4
+ startLine: number;
5
+ endLine: number;
6
+ }
7
+ export interface DuplicateBlock {
8
+ /** length of the matched run in normalised tokens */
9
+ tokens: number;
10
+ a: DuplicateLocation;
11
+ b: DuplicateLocation;
12
+ }
13
+ export interface DuplicateFileInput {
14
+ path: string;
15
+ content: string;
16
+ }
17
+ export interface DuplicateDetectionResult {
18
+ blocks: DuplicateBlock[];
19
+ /** files excluded from comparison (too large / minified) — never silently dropped */
20
+ skippedFiles: string[];
21
+ }
22
+ /** Files above this line count are excluded from duplicate comparison */
23
+ export declare const DUPLICATE_MAX_FILE_LINES = 5000;
24
+ /** A single line longer than this marks the file as generated/minified and excludes it */
25
+ export declare const DUPLICATE_MAX_LINE_LENGTH = 500;
26
+ /** Hard cap on reported blocks per scan (longest first) so boilerplate-heavy repos stay usable */
27
+ export declare const DUPLICATE_MAX_BLOCKS = 500;
28
+ interface Token {
29
+ norm: string;
30
+ line: number;
31
+ }
32
+ /** Lex source into normalised tokens with original line numbers. Never throws. */
33
+ export declare function tokeniseNormalised(source: string, filePath: string): Token[];
34
+ /**
35
+ * Blanks import/re-export statements so they never participate in matching
36
+ * (newlines are preserved, so reported line numbers stay exact). Import
37
+ * headers are structural boilerplate - two Next.js pages importing the same
38
+ * twenty UI components are not copy-paste debt, and established duplication
39
+ * engines (e.g. SonarQube's CPD) exclude imports for the same reason.
40
+ */
41
+ export declare function stripImports(source: string, filePath: string): string;
42
+ export declare function detectDuplicates(files: DuplicateFileInput[], minTokens?: number): DuplicateDetectionResult;
43
+ /**
44
+ * Converts a detected block into per-file smell findings. A within-file block
45
+ * yields one finding; a cross-file block yields a primary finding on the first
46
+ * file and a non-primary mirror on the second, so totals never double-count.
47
+ */
48
+ export declare function duplicateBlockToFindings(block: DuplicateBlock): Array<{
49
+ file: string;
50
+ finding: DuplicateBlockFinding;
51
+ }>;
52
+ export {};
53
+ //# sourceMappingURL=duplicates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"duplicates.d.ts","sourceRoot":"","sources":["../src/duplicates.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAc/C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,MAAM,EAAE,MAAM,CAAA;IACd,CAAC,EAAE,iBAAiB,CAAA;IACpB,CAAC,EAAE,iBAAiB,CAAA;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,cAAc,EAAE,CAAA;IACxB,qFAAqF;IACrF,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,OAAO,CAAA;AAC5C,0FAA0F;AAC1F,eAAO,MAAM,yBAAyB,MAAM,CAAA;AAC5C,kGAAkG;AAClG,eAAO,MAAM,oBAAoB,MAAM,CAAA;AAyBvC,UAAU,KAAK;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAUD,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE,CAiG5E;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAuFrE;AAmCD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,EAAE,EAAE,SAAS,SAAK,GAAG,wBAAwB,CA6KtG;AAoCD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,qBAAqB,CAAA;CAAE,CAAC,CA6BvH"}