scancscode 1.0.31 → 1.0.34
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/.trae/specs/fix-doc-comment-boundary/checklist.md +7 -0
- package/.trae/specs/fix-doc-comment-boundary/spec.md +52 -0
- package/.trae/specs/fix-doc-comment-boundary/tasks.md +34 -0
- package/.trae/specs/fix-interpolated-string-nested-literals/checklist.md +7 -0
- package/.trae/specs/fix-interpolated-string-nested-literals/spec.md +55 -0
- package/.trae/specs/fix-interpolated-string-nested-literals/tasks.md +25 -0
- package/.trae/specs/fix-remaining-interpolated-string-index/checklist.md +9 -0
- package/.trae/specs/fix-remaining-interpolated-string-index/spec.md +59 -0
- package/.trae/specs/fix-remaining-interpolated-string-index/tasks.md +41 -0
- package/.trae/specs/fix-return-interpolated-string/checklist.md +8 -0
- package/.trae/specs/fix-return-interpolated-string/spec.md +60 -0
- package/.trae/specs/fix-return-interpolated-string/tasks.md +39 -0
- package/.trae/specs/handle-anonymous-function-strings/checklist.md +11 -0
- package/.trae/specs/handle-anonymous-function-strings/spec.md +137 -0
- package/.trae/specs/handle-anonymous-function-strings/tasks.md +65 -0
- package/.trae/specs/handle-interpolated-string-double-braces/checklist.md +9 -0
- package/.trae/specs/handle-interpolated-string-double-braces/spec.md +61 -0
- package/.trae/specs/handle-interpolated-string-double-braces/tasks.md +41 -0
- package/.trae/specs/handle-return-statement/checklist.md +11 -0
- package/.trae/specs/handle-return-statement/spec.md +76 -0
- package/.trae/specs/handle-return-statement/tasks.md +44 -0
- package/.trae/specs/handle-special-string-characters/checklist.md +13 -0
- package/.trae/specs/handle-special-string-characters/spec.md +94 -0
- package/.trae/specs/handle-special-string-characters/tasks.md +74 -0
- package/.trae/specs/unify-return-statement-string-extraction/checklist.md +10 -0
- package/.trae/specs/unify-return-statement-string-extraction/spec.md +70 -0
- package/.trae/specs/unify-return-statement-string-extraction/tasks.md +54 -0
- package/bin/scanliterals.js +3 -3
- package/bin/slimlangs.js +3 -3
- package/dist/debug-arg.js +30 -0
- package/dist/debug-args.js +34 -0
- package/dist/debug-comment-5.js +25 -0
- package/dist/debug-comment-strings.js +24 -0
- package/dist/debug-full.js +14 -0
- package/dist/debug-template-issue.js +33 -0
- package/dist/debug-test-5.js +23 -0
- package/dist/debug-test.js +21 -0
- package/dist/debug.js +15 -0
- package/dist/simple-debug.js +27 -0
- package/dist/simple-test.js +61 -0
- package/dist/src/CSharpStringExtractor.js +1791 -358
- package/dist/src/CmdExecutor.js +6 -8
- package/dist/temp-original-source.js +1 -0
- package/dist/test/CSharpStringExtractor.test.js +1587 -207
- package/dist/test-logic.js +79 -0
- package/dist/test-regex.js +13 -0
- package/docs/CSharpStringExtractor/344/273/243/347/240/201/347/224/237/346/210/220/346/217/220/347/244/272/350/257/215.txt +73 -0
- package/jest.config.js +9 -9
- package/package.json +1 -1
- package/src/CSCodeScanner.ts +305 -305
- package/src/CSVUtils.ts +181 -181
- package/src/CSharpStringExtractor.ts +2058 -479
- package/src/CmdExecutor.ts +107 -106
- package/src/LiteralCollector.ts +143 -143
- package/src/RunConvert.ts +3 -3
- package/src/RunSlimLangs.ts +3 -3
- package/src/TableScanner.ts +92 -92
- package/test/CSharpStringExtractor.test.ts +1673 -208
- package/test/KeeperDialog.cs +114 -0
- package/test/TestSpecialString.cs +24 -0
- package/tsconfig.json +109 -109
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const CSharpStringExtractor_1 = require("./src/CSharpStringExtractor");
|
|
4
|
+
const extractor = new CSharpStringExtractor_1.CSharpStringExtractor();
|
|
5
|
+
const code = `
|
|
6
|
+
//上锁
|
|
7
|
+
case (int)State.Lock:
|
|
8
|
+
Toast.Info($"灵田{_model.GetFarmLandUnlockLevel(_landId)}级解锁");
|
|
9
|
+
break;
|
|
10
|
+
`;
|
|
11
|
+
console.log('=== 开始调试 ===');
|
|
12
|
+
console.log('完整代码:', JSON.stringify(code));
|
|
13
|
+
console.log('\n内插字符串位置:', code.indexOf(`$"灵田{_model.GetFarmLandUnlockLevel(_landId)}级解锁"`));
|
|
14
|
+
const snippets = extractor.extractStrings(code);
|
|
15
|
+
console.log('\n=== 提取到的 snippet ===');
|
|
16
|
+
console.log(`数量: ${snippets.length}`);
|
|
17
|
+
snippets.forEach((snippet, index) => {
|
|
18
|
+
console.log(`\nSnippet ${index}:`);
|
|
19
|
+
console.log(` originalIndex: ${snippet.originalIndex}`);
|
|
20
|
+
console.log(` originalCode: ${JSON.stringify(snippet.originalCode)}`);
|
|
21
|
+
console.log(` convertedCode: ${JSON.stringify(snippet.convertedCode)}`);
|
|
22
|
+
console.log(` literals:`, snippet.literals);
|
|
23
|
+
console.log(` isChanged: ${snippet.isChanged}`);
|
|
24
|
+
console.log(` 对应代码片段:`, JSON.stringify(code.substring(snippet.originalIndex, snippet.originalIndex + snippet.originalCode.length)));
|
|
25
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const CSharpStringExtractor_1 = require("./src/CSharpStringExtractor");
|
|
4
|
+
const extractor = new CSharpStringExtractor_1.CSharpStringExtractor();
|
|
5
|
+
// Test code 1
|
|
6
|
+
const code = `
|
|
7
|
+
protected override void OnShow(object param)
|
|
8
|
+
{
|
|
9
|
+
// Log.Info("AAA:ChooseSutraLayer显示1");
|
|
10
|
+
base.OnShow(param);
|
|
11
|
+
}`;
|
|
12
|
+
console.log('=== code.indexOf("AAA:Choose..."):', code.indexOf(`"AAA:ChooseSutraLayer显示1"`));
|
|
13
|
+
console.log('\n=== Full code (indices): ===');
|
|
14
|
+
for (let i = 0; i < code.length; i++) {
|
|
15
|
+
console.log(i, ':', JSON.stringify(code[i]));
|
|
16
|
+
}
|
|
17
|
+
console.log('\n=== Extracting snippets ===');
|
|
18
|
+
const snippets = extractor.extractStrings(code);
|
|
19
|
+
console.log(`\n=== Total snippets: ${snippets.length} ===`);
|
|
20
|
+
for (let i = 0; i < snippets.length; i++) {
|
|
21
|
+
console.log(`\n--- Snippet ${i} ---`);
|
|
22
|
+
console.log('Original Index:', snippets[i].originalIndex);
|
|
23
|
+
console.log('Original Code:', JSON.stringify(snippets[i].originalCode));
|
|
24
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const CSharpStringExtractor_1 = require("./src/CSharpStringExtractor");
|
|
4
|
+
const extractor = new CSharpStringExtractor_1.CSharpStringExtractor();
|
|
5
|
+
const code = `infoStr += $"是否暴击: [b]{(_damageInfo.IsCritical ? "[color=#00B000]是[/color]" : "否")}[/b]\n";`;
|
|
6
|
+
console.log('Original code:', code);
|
|
7
|
+
console.log('\n---\n');
|
|
8
|
+
const snippet = new CSharpStringExtractor_1.CodeSnippet();
|
|
9
|
+
snippet.originalCode = code;
|
|
10
|
+
snippet.originalIndex = 0;
|
|
11
|
+
const result = extractor.processStringTemplates(code, snippet, 'Tr', 'Format');
|
|
12
|
+
console.log('Result:', result);
|
|
13
|
+
console.log('\n---\n');
|
|
14
|
+
console.log('Snippet converted code:', snippet.convertedCode);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const testCode = `infoStr += $"是否暴击: [b]{(_damageInfo.IsCritical ? "[color=#00B000]是[/color]" : "否")}[/b]\n";`;
|
|
3
|
+
const templateRegex = /(\$@?|@\$)"((?:[^"\\]|\\.)*)"/gs;
|
|
4
|
+
const match = templateRegex.exec(testCode);
|
|
5
|
+
if (match) {
|
|
6
|
+
console.log('Full match:', JSON.stringify(match[0]));
|
|
7
|
+
console.log('Content:', JSON.stringify(match[2]));
|
|
8
|
+
const content = match[2];
|
|
9
|
+
let templateIndex = 0;
|
|
10
|
+
console.log('\n=== Original code without string handling ===');
|
|
11
|
+
while (templateIndex < content.length) {
|
|
12
|
+
if (content[templateIndex] === '{') {
|
|
13
|
+
templateIndex++;
|
|
14
|
+
let exprStart = templateIndex;
|
|
15
|
+
let braceDepth = 1;
|
|
16
|
+
while (templateIndex < content.length && braceDepth > 0) {
|
|
17
|
+
if (content[templateIndex] === '{') {
|
|
18
|
+
braceDepth++;
|
|
19
|
+
}
|
|
20
|
+
else if (content[templateIndex] === '}') {
|
|
21
|
+
braceDepth--;
|
|
22
|
+
}
|
|
23
|
+
console.log(`Index ${templateIndex}: char '${content[templateIndex]}', depth: ${braceDepth}`);
|
|
24
|
+
templateIndex++;
|
|
25
|
+
}
|
|
26
|
+
const varExpr = content.substring(exprStart, templateIndex - 1);
|
|
27
|
+
console.log('Extracted variable expression:', JSON.stringify(varExpr));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
templateIndex++;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const CSharpStringExtractor_1 = require("./src/CSharpStringExtractor");
|
|
4
|
+
const extractor = new CSharpStringExtractor_1.CSharpStringExtractor();
|
|
5
|
+
const code = `
|
|
6
|
+
//上锁
|
|
7
|
+
case (int)State.Lock:
|
|
8
|
+
Toast.Info($"灵田{_model.GetFarmLandUnlockLevel(_landId)}级解锁");
|
|
9
|
+
break;
|
|
10
|
+
`;
|
|
11
|
+
console.log('=== code ===');
|
|
12
|
+
console.log(code);
|
|
13
|
+
console.log('\n=== Extracting snippets ===');
|
|
14
|
+
const snippets = extractor.extractStrings(code);
|
|
15
|
+
console.log(`\n=== snippets.length: ${snippets.length}`);
|
|
16
|
+
for (let i = 0; i < snippets.length; i++) {
|
|
17
|
+
console.log(`\n--- snippet ${i} ---`);
|
|
18
|
+
console.log('originalIndex:', snippets[i].originalIndex);
|
|
19
|
+
console.log('originalCode:', JSON.stringify(snippets[i].originalCode));
|
|
20
|
+
console.log('convertedCode:', JSON.stringify(snippets[i].convertedCode));
|
|
21
|
+
console.log('literals:', snippets[i].literals);
|
|
22
|
+
console.log('isChanged:', snippets[i].isChanged);
|
|
23
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const testCode = `
|
|
3
|
+
private void OnBtnIaa(EventContext context)
|
|
4
|
+
{
|
|
5
|
+
var iaaConfig = IAAConfigTable.GetConfigById((int)IAAId.境界失败_加速冷却);
|
|
6
|
+
if (iaaConfig == null)
|
|
7
|
+
{
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
string des = $"观看视频后\\n等待时间减少{iaaConfig.EffectValue / 60}分钟";
|
|
12
|
+
this.GetModel<IAAModel>().ShowAdWithDialog(IAAId.境界失败_加速冷却, "加速时间", des, null);
|
|
13
|
+
}
|
|
14
|
+
`;
|
|
15
|
+
console.log('Full test code:', testCode);
|
|
16
|
+
console.log('Index of "加速时间":', testCode.indexOf('"加速时间"'));
|
|
17
|
+
console.log('Index of "观看视频后":', testCode.indexOf('"观看视频后'));
|
|
18
|
+
console.log('\n--- Code around index 358 ---');
|
|
19
|
+
console.log(testCode.substring(350, 380));
|
|
20
|
+
console.log('\n--- Code around index 375 ---');
|
|
21
|
+
console.log(testCode.substring(360, 390));
|
package/dist/debug.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const CSharpStringExtractor_1 = require("./src/CSharpStringExtractor");
|
|
4
|
+
const extractor = new CSharpStringExtractor_1.CSharpStringExtractor();
|
|
5
|
+
const code = `infoStr += $"是否暴击: [b]{(_damageInfo.IsCritical ? "[color=#00B000]是[/color]" : "否")}[/b]\n";`;
|
|
6
|
+
console.log('Testing code:', code);
|
|
7
|
+
console.log('-------------------');
|
|
8
|
+
const snippets = extractor.extractStrings(code);
|
|
9
|
+
console.log('Number of snippets:', snippets.length);
|
|
10
|
+
if (snippets.length > 0) {
|
|
11
|
+
const snippet = snippets[0];
|
|
12
|
+
console.log('Original code:', snippet.originalCode);
|
|
13
|
+
console.log('Converted code:', snippet.convertedCode);
|
|
14
|
+
console.log('Literals:', snippet.literals);
|
|
15
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const CSharpStringExtractor_1 = require("./src/CSharpStringExtractor");
|
|
4
|
+
const extractor = new CSharpStringExtractor_1.CSharpStringExtractor();
|
|
5
|
+
const code = `
|
|
6
|
+
protected override void OnShow(object param)
|
|
7
|
+
{
|
|
8
|
+
// Log.Info("AAA:ChooseSutraLayer显示1");
|
|
9
|
+
base.OnShow(param);
|
|
10
|
+
}`;
|
|
11
|
+
console.log('=== code.indexOf("AAA..."):', code.indexOf(`"AAA:ChooseSutraLayer显示1"`));
|
|
12
|
+
console.log('\n=== Code with indices: ===');
|
|
13
|
+
let idx = 0;
|
|
14
|
+
while (idx < code.length) {
|
|
15
|
+
console.log(idx, code.charCodeAt(idx), JSON.stringify(code[idx]));
|
|
16
|
+
idx++;
|
|
17
|
+
}
|
|
18
|
+
console.log('\n=== Extracting snippets ===');
|
|
19
|
+
const snippets = extractor.extractStrings(code);
|
|
20
|
+
console.log('\n=== snippets.length:', snippets.length);
|
|
21
|
+
let snippetIdx = 0;
|
|
22
|
+
while (snippetIdx < snippets.length) {
|
|
23
|
+
console.log('\n--- snippet', snippetIdx, '---');
|
|
24
|
+
console.log('originalIndex:', snippets[snippetIdx].originalIndex);
|
|
25
|
+
console.log('originalCode:', JSON.stringify(snippets[snippetIdx].originalCode));
|
|
26
|
+
snippetIdx++;
|
|
27
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const testCode = `infoStr += $"是否暴击: [b]{(_damageInfo.IsCritical ? "[color=#00B000]是[/color]" : "否")}[/b]\n";`;
|
|
3
|
+
console.log('Original code:', testCode);
|
|
4
|
+
console.log('\nLooking for interpolated string...');
|
|
5
|
+
let i = 0;
|
|
6
|
+
while (i < testCode.length - 1) {
|
|
7
|
+
let startIndex = -1;
|
|
8
|
+
let contentStart = -1;
|
|
9
|
+
if (i + 1 < testCode.length) {
|
|
10
|
+
console.log(`i=${i}, char1=${testCode[i]}, char2=${testCode[i + 1]}`);
|
|
11
|
+
if (testCode[i] === '$' && testCode[i + 1] === '"') {
|
|
12
|
+
console.log('→ Found $" at', i);
|
|
13
|
+
startIndex = i;
|
|
14
|
+
contentStart = i + 2;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
if (startIndex !== -1 && contentStart !== -1) {
|
|
18
|
+
console.log('startIndex:', startIndex, 'contentStart:', contentStart);
|
|
19
|
+
let braceDepth = 0;
|
|
20
|
+
let inString = false;
|
|
21
|
+
let escapeNext = false;
|
|
22
|
+
let stringDelimiter = '';
|
|
23
|
+
let j = contentStart;
|
|
24
|
+
let endFound = false;
|
|
25
|
+
while (j < testCode.length) {
|
|
26
|
+
const char = testCode[j];
|
|
27
|
+
console.log(` j=${j}, char=${JSON.stringify(char)}, inString=${inString}, stringDelimiter=${JSON.stringify(stringDelimiter)}, braceDepth=${braceDepth}`);
|
|
28
|
+
if (escapeNext) {
|
|
29
|
+
escapeNext = false;
|
|
30
|
+
}
|
|
31
|
+
else if (char === '\\') {
|
|
32
|
+
escapeNext = true;
|
|
33
|
+
}
|
|
34
|
+
else if (inString) {
|
|
35
|
+
if (char === stringDelimiter) {
|
|
36
|
+
inString = false;
|
|
37
|
+
stringDelimiter = '';
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else if (char === '"' || char === "'") {
|
|
41
|
+
inString = true;
|
|
42
|
+
stringDelimiter = char;
|
|
43
|
+
}
|
|
44
|
+
else if (!inString && char === '{') {
|
|
45
|
+
braceDepth++;
|
|
46
|
+
}
|
|
47
|
+
else if (!inString && char === '}') {
|
|
48
|
+
braceDepth--;
|
|
49
|
+
}
|
|
50
|
+
else if (!inString && char === '"' && braceDepth === 0) {
|
|
51
|
+
console.log('→ Found closing " at', j);
|
|
52
|
+
endFound = true;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
j++;
|
|
56
|
+
}
|
|
57
|
+
console.log('End loop');
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
i++;
|
|
61
|
+
}
|