@tyvm/knowhow 0.0.90 → 0.0.91
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/.depcheckrc +31 -0
- package/bin/knowhow.js +1 -1
- package/package.json +4 -32
- package/src/agents/tools/executeScript/index.ts +5 -0
- package/src/agents/tools/googleSearch.ts +2 -2
- package/src/agents/tools/index.ts +0 -3
- package/src/agents/tools/list.ts +0 -147
- package/src/agents/tools/loadWebpage.ts +3 -113
- package/src/auth/browserLogin.ts +10 -13
- package/src/cli.ts +63 -3
- package/src/clients/gemini.ts +96 -25
- package/src/clients/http.ts +7 -11
- package/src/clients/pricing/google.ts +122 -26
- package/src/conversion.ts +24 -54
- package/src/index.ts +8 -1
- package/src/login.ts +5 -6
- package/src/plugins/language.ts +0 -4
- package/src/plugins/plugins.ts +0 -14
- package/src/plugins/url.ts +31 -12
- package/src/services/GitHub.ts +2 -2
- package/src/services/KnowhowClient.ts +34 -34
- package/src/{plugins/downloader/downloader.ts → services/MediaProcessorService.ts} +109 -267
- package/src/services/S3.ts +16 -16
- package/src/services/index.ts +4 -4
- package/src/services/modules/index.ts +10 -2
- package/src/services/modules/types.ts +5 -2
- package/src/services/script-execution/ScriptExecutor.ts +29 -10
- package/src/services/script-execution/ScriptPolicy.ts +6 -2
- package/src/types.ts +1 -0
- package/src/utils/http.ts +127 -0
- package/src/workers/auth/PasskeySetup.ts +7 -11
- package/tests/clients/AIClient.test.ts +24 -21
- package/tests/manual/file-edits/figma.test.ts +3 -70
- package/tests/plugins/language/languagePlugin-content-triggers.test.ts +2 -0
- package/tests/plugins/language/languagePlugin.test.ts +2 -0
- package/tests/processors/ToolResponseCache.test.ts +2 -2
- package/tests/test.spec.ts +0 -14
- package/tests/unit/modules/moduleLoading.test.ts +7 -4
- package/tests/unit/plugins/pluginLoading.test.ts +6 -6
- package/ts_build/package.json +4 -32
- package/ts_build/src/agents/tools/ast/astAppendNode.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astAppendNode.js +2 -90
- package/ts_build/src/agents/tools/ast/astAppendNode.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astDeleteNode.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astDeleteNode.js +2 -88
- package/ts_build/src/agents/tools/ast/astDeleteNode.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astEditNode.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astEditNode.js +2 -90
- package/ts_build/src/agents/tools/ast/astEditNode.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astGetPathForLine.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astGetPathForLine.js +2 -72
- package/ts_build/src/agents/tools/ast/astGetPathForLine.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astListPaths.d.ts +1 -1
- package/ts_build/src/agents/tools/ast/astListPaths.js +2 -72
- package/ts_build/src/agents/tools/ast/astListPaths.js.map +1 -1
- package/ts_build/src/agents/tools/executeScript/index.d.ts +3 -2
- package/ts_build/src/agents/tools/executeScript/index.js +4 -1
- package/ts_build/src/agents/tools/executeScript/index.js.map +1 -1
- package/ts_build/src/agents/tools/googleSearch.js +2 -2
- package/ts_build/src/agents/tools/googleSearch.js.map +1 -1
- package/ts_build/src/agents/tools/index.d.ts +0 -3
- package/ts_build/src/agents/tools/index.js +0 -3
- package/ts_build/src/agents/tools/index.js.map +1 -1
- package/ts_build/src/agents/tools/list.js +0 -138
- package/ts_build/src/agents/tools/list.js.map +1 -1
- package/ts_build/src/agents/tools/loadWebpage.js +1 -89
- package/ts_build/src/agents/tools/loadWebpage.js.map +1 -1
- package/ts_build/src/agents/tools/textSearch.d.ts +1 -1
- package/ts_build/src/auth/browserLogin.js +7 -7
- package/ts_build/src/auth/browserLogin.js.map +1 -1
- package/ts_build/src/cli.d.ts +1 -1
- package/ts_build/src/cli.js +47 -1
- package/ts_build/src/cli.js.map +1 -1
- package/ts_build/src/clients/gemini.d.ts +1 -73
- package/ts_build/src/clients/gemini.js +57 -19
- package/ts_build/src/clients/gemini.js.map +1 -1
- package/ts_build/src/clients/http.js +5 -9
- package/ts_build/src/clients/http.js.map +1 -1
- package/ts_build/src/clients/pricing/google.d.ts +17 -73
- package/ts_build/src/clients/pricing/google.js +47 -10
- package/ts_build/src/clients/pricing/google.js.map +1 -1
- package/ts_build/src/conversion.d.ts +1 -4
- package/ts_build/src/conversion.js +12 -27
- package/ts_build/src/conversion.js.map +1 -1
- package/ts_build/src/index.d.ts +4 -0
- package/ts_build/src/index.js +7 -1
- package/ts_build/src/index.js.map +1 -1
- package/ts_build/src/login.js +5 -4
- package/ts_build/src/login.js.map +1 -1
- package/ts_build/src/plugins/downloader/downloader.js +3 -3
- package/ts_build/src/plugins/downloader/downloader.js.map +1 -1
- package/ts_build/src/plugins/language.js.map +1 -1
- package/ts_build/src/plugins/plugins.js +0 -14
- package/ts_build/src/plugins/plugins.js.map +1 -1
- package/ts_build/src/plugins/tree-sitter/editor.d.ts +3 -32
- package/ts_build/src/plugins/tree-sitter/editor.js +6 -208
- package/ts_build/src/plugins/tree-sitter/editor.js.map +1 -1
- package/ts_build/src/plugins/tree-sitter/parser.d.ts +19 -54
- package/ts_build/src/plugins/tree-sitter/parser.js +19 -293
- package/ts_build/src/plugins/tree-sitter/parser.js.map +1 -1
- package/ts_build/src/plugins/tree-sitter/simple-paths.d.ts +2 -15
- package/ts_build/src/plugins/tree-sitter/simple-paths.js +2 -324
- package/ts_build/src/plugins/tree-sitter/simple-paths.js.map +1 -1
- package/ts_build/src/plugins/url.js +27 -8
- package/ts_build/src/plugins/url.js.map +1 -1
- package/ts_build/src/services/GitHub.js +2 -2
- package/ts_build/src/services/GitHub.js.map +1 -1
- package/ts_build/src/services/KnowhowClient.d.ts +29 -29
- package/ts_build/src/services/KnowhowClient.js +33 -33
- package/ts_build/src/services/KnowhowClient.js.map +1 -1
- package/ts_build/src/services/MediaProcessorService.d.ts +22 -0
- package/ts_build/src/services/MediaProcessorService.js +215 -0
- package/ts_build/src/services/MediaProcessorService.js.map +1 -0
- package/ts_build/src/services/S3.js +12 -18
- package/ts_build/src/services/S3.js.map +1 -1
- package/ts_build/src/services/index.d.ts +3 -2
- package/ts_build/src/services/index.js +3 -3
- package/ts_build/src/services/index.js.map +1 -1
- package/ts_build/src/services/modules/index.js +10 -2
- package/ts_build/src/services/modules/index.js.map +1 -1
- package/ts_build/src/services/modules/types.d.ts +5 -2
- package/ts_build/src/services/script-execution/ScriptExecutor.js +22 -7
- package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -1
- package/ts_build/src/services/script-execution/ScriptPolicy.d.ts +1 -1
- package/ts_build/src/services/script-execution/ScriptPolicy.js +4 -2
- package/ts_build/src/services/script-execution/ScriptPolicy.js.map +1 -1
- package/ts_build/src/types.d.ts +1 -0
- package/ts_build/src/types.js +1 -0
- package/ts_build/src/types.js.map +1 -1
- package/ts_build/src/utils/http.d.ts +27 -0
- package/ts_build/src/utils/http.js +98 -0
- package/ts_build/src/utils/http.js.map +1 -0
- package/ts_build/src/workers/auth/PasskeySetup.js +6 -7
- package/ts_build/src/workers/auth/PasskeySetup.js.map +1 -1
- package/ts_build/tests/clients/AIClient.test.js +11 -14
- package/ts_build/tests/clients/AIClient.test.js.map +1 -1
- package/ts_build/tests/manual/file-edits/figma.test.d.ts +0 -1
- package/ts_build/tests/manual/file-edits/figma.test.js +1 -46
- package/ts_build/tests/manual/file-edits/figma.test.js.map +1 -1
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +2 -0
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +1 -1
- package/ts_build/tests/plugins/language/languagePlugin.test.js +2 -0
- package/ts_build/tests/plugins/language/languagePlugin.test.js.map +1 -1
- package/ts_build/tests/processors/ToolResponseCache.test.js +2 -2
- package/ts_build/tests/processors/ToolResponseCache.test.js.map +1 -1
- package/ts_build/tests/test.spec.js +0 -14
- package/ts_build/tests/test.spec.js.map +1 -1
- package/ts_build/tests/tree-sitter/tree-sitter.test.d.ts +0 -1
- package/ts_build/tests/tree-sitter/tree-sitter.test.js +2 -183
- package/ts_build/tests/tree-sitter/tree-sitter.test.js.map +1 -1
- package/ts_build/tests/unit/modules/moduleLoading.test.js +6 -4
- package/ts_build/tests/unit/modules/moduleLoading.test.js.map +1 -1
- package/ts_build/tests/unit/plugins/pluginLoading.test.js +4 -4
- package/ts_build/tests/unit/plugins/pluginLoading.test.js.map +1 -1
- package/benchmarks/.dockerignore +0 -7
- package/benchmarks/README.md +0 -166
- package/benchmarks/docker/Dockerfile +0 -68
- package/benchmarks/example-config.yml +0 -27
- package/benchmarks/jest.config.js +0 -13
- package/benchmarks/package-lock.json +0 -4297
- package/benchmarks/package.json +0 -39
- package/benchmarks/results/27b0a06/2025-09-27/xai/xai-grok-code-fast-1.json +0 -2909
- package/benchmarks/results/4057aed/2025-08-14/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -1671
- package/benchmarks/results/4542435/2025-08-05/lms/lms-openai-gpt-oss-20b.json +0 -2814
- package/benchmarks/results/4542435/2025-08-05/lms/lms-qwen-qwen3-30b-a3b-2507.json +0 -2014
- package/benchmarks/results/4fb9125/2025-08-07/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3121
- package/benchmarks/results/5766aee/2025-08-02/lms-qwen/qwen3-coder-30b.json +0 -98
- package/benchmarks/results/6d73808/2025-08-07/openai/openai-gpt-5.json +0 -3256
- package/benchmarks/results/77bf0a6/2025-08-02/lms-qwen/qwen3-30b-a3b-2507.json +0 -4298
- package/benchmarks/results/8c0d445/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3031
- package/benchmarks/results/8c0d445/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +0 -2990
- package/benchmarks/results/ac6b2ab/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +0 -3256
- package/benchmarks/results/ac6b2ab/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +0 -3007
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +0 -3256
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-mini-2025-04-14.json +0 -3036
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-nano-2025-04-14.json +0 -3280
- package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-30b-a3b-2507.json +0 -1920
- package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-coder-30b.json +0 -3281
- package/benchmarks/results/b502ed9/2025-08-03/lms-qwen/qwen3-coder-30b.json +0 -2896
- package/benchmarks/results/d1a8129/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +0 -3011
- package/benchmarks/results/e60471c/2025-08-03/lms/qwen3-30b-a3b-2507.json +0 -3003
- package/benchmarks/scripts/build-and-run.sh +0 -47
- package/benchmarks/scripts/clone-exercism.sh +0 -92
- package/benchmarks/scripts/validate.sh +0 -48
- package/benchmarks/src/__tests__/runner.test.ts +0 -27
- package/benchmarks/src/cli.ts +0 -90
- package/benchmarks/src/evaluators/EvaluatorRegistry.ts +0 -64
- package/benchmarks/src/evaluators/JavaScriptEvaluator.ts +0 -183
- package/benchmarks/src/evaluators/index.ts +0 -3
- package/benchmarks/src/evaluators/types.ts +0 -22
- package/benchmarks/src/index.ts +0 -3
- package/benchmarks/src/providers.ts +0 -13
- package/benchmarks/src/runner.ts +0 -824
- package/benchmarks/src/types.ts +0 -63
- package/benchmarks/tsconfig.json +0 -19
- package/leaderboard/README.md +0 -148
- package/leaderboard/app/api/benchmark-data/route.ts +0 -131
- package/leaderboard/app/api/benchmark-detail/route.ts +0 -172
- package/leaderboard/app/details/[model]/[provider]/[language]/page.tsx +0 -501
- package/leaderboard/app/exercise/[model]/[provider]/[language]/[exercise]/page.tsx +0 -375
- package/leaderboard/app/globals.css +0 -27
- package/leaderboard/app/layout.tsx +0 -21
- package/leaderboard/app/page.tsx +0 -170
- package/leaderboard/components/LeaderboardTable.tsx +0 -168
- package/leaderboard/components/PerformanceChart.tsx +0 -109
- package/leaderboard/next-env.d.ts +0 -5
- package/leaderboard/next.config.js +0 -4
- package/leaderboard/package-lock.json +0 -6363
- package/leaderboard/package.json +0 -28
- package/leaderboard/postcss.config.js +0 -6
- package/leaderboard/tailwind.config.js +0 -17
- package/leaderboard/tsconfig.json +0 -28
- package/leaderboard/types/benchmark.ts +0 -67
- package/leaderboard/utils/dataProcessor.ts +0 -33
- package/src/agents/tools/asana/definitions.ts +0 -199
- package/src/agents/tools/asana/index.ts +0 -108
- package/src/agents/tools/ast/astAppendNode.ts +0 -90
- package/src/agents/tools/ast/astDeleteNode.ts +0 -88
- package/src/agents/tools/ast/astEditNode.ts +0 -95
- package/src/agents/tools/ast/astGetPathForLine.ts +0 -73
- package/src/agents/tools/ast/astListPaths.ts +0 -66
- package/src/agents/tools/ast/index.ts +0 -7
- package/src/agents/tools/github/definitions.ts +0 -89
- package/src/agents/tools/github/index.ts +0 -67
- package/src/chat-old.ts +0 -446
- package/src/plugins/asana.ts +0 -146
- package/src/plugins/downloader/plugin.ts +0 -103
- package/src/plugins/downloader/types.ts +0 -92
- package/src/plugins/figma.ts +0 -158
- package/src/plugins/github.ts +0 -219
- package/src/plugins/jira.ts +0 -115
- package/src/plugins/linear.ts +0 -230
- package/src/plugins/notion.ts +0 -179
- package/src/plugins/tree-sitter/editor.ts +0 -369
- package/src/plugins/tree-sitter/lang-packs/index.ts +0 -23
- package/src/plugins/tree-sitter/lang-packs/java.ts +0 -59
- package/src/plugins/tree-sitter/lang-packs/javascript.ts +0 -57
- package/src/plugins/tree-sitter/lang-packs/python.ts +0 -45
- package/src/plugins/tree-sitter/lang-packs/types.ts +0 -79
- package/src/plugins/tree-sitter/lang-packs/typescript.ts +0 -49
- package/src/plugins/tree-sitter/parser.ts +0 -470
- package/src/plugins/tree-sitter/simple-paths.ts +0 -467
- package/tests/tree-sitter/editor.test.ts +0 -113
- package/tests/tree-sitter/invalid.test.ts +0 -299
- package/tests/tree-sitter/paths/common-edits.test.ts +0 -564
- package/tests/tree-sitter/paths/debug-exact-position.test.ts +0 -44
- package/tests/tree-sitter/paths/debug-line-indexing.test.ts +0 -49
- package/tests/tree-sitter/paths/debug-paths.test.ts +0 -90
- package/tests/tree-sitter/paths/paths.test.ts +0 -170
- package/tests/tree-sitter/paths/simple-paths.test.ts +0 -367
- package/tests/tree-sitter/sample-after.ts +0 -48
- package/tests/tree-sitter/sample-before.ts +0 -25
- package/tests/tree-sitter/test-files/completely-broken.ts +0 -7
- package/tests/tree-sitter/test-files/duplicate-braces.ts +0 -39
- package/tests/tree-sitter/test-files/invalid-nesting.ts +0 -39
- package/tests/tree-sitter/test-files/malformed-signature.ts +0 -39
- package/tests/tree-sitter/test-files/mismatched-parens.ts +0 -39
- package/tests/tree-sitter/test-files/missing-semicolon.ts +0 -39
- package/tests/tree-sitter/test-files/partially-broken.ts +0 -20
- package/tests/tree-sitter/test-files/specific-errors.ts +0 -14
- package/tests/tree-sitter/test-files/unclosed-string.ts +0 -39
- package/tests/tree-sitter/tree-sitter.test.ts +0 -251
|
@@ -1,217 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TreeEditor = void 0;
|
|
4
|
-
const simple_paths_1 = require("./simple-paths");
|
|
5
|
-
const fs_1 = require("fs");
|
|
6
|
-
const diff_1 = require("diff");
|
|
7
4
|
class TreeEditor {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
tree;
|
|
11
|
-
pathResolver;
|
|
12
|
-
constructor(parser, sourceCode, originalText, existingTree) {
|
|
13
|
-
this.parser = parser;
|
|
14
|
-
this.originalText = originalText || sourceCode;
|
|
15
|
-
this.tree = existingTree || parser.parseString(sourceCode);
|
|
16
|
-
this.pathResolver = new simple_paths_1.SimplePathResolver(parser);
|
|
5
|
+
constructor(..._args) {
|
|
6
|
+
throw new Error("Tree-sitter TreeEditor has been moved to @tyvm/knowhow-module-ast. Install that package and add it to your knowhow.json modules.");
|
|
17
7
|
}
|
|
18
|
-
|
|
19
|
-
|
|
8
|
+
static fromFile(..._args) {
|
|
9
|
+
throw new Error("Tree-sitter TreeEditor has been moved to @tyvm/knowhow-module-ast.");
|
|
20
10
|
}
|
|
21
|
-
static
|
|
22
|
-
|
|
23
|
-
return new TreeEditor(parser, sourceCode);
|
|
24
|
-
}
|
|
25
|
-
static fromTree(parser, tree) {
|
|
26
|
-
const sourceCode = tree.rootNode.text;
|
|
27
|
-
return new TreeEditor(parser, sourceCode, sourceCode, tree);
|
|
28
|
-
}
|
|
29
|
-
addLines(path, content, afterLine) {
|
|
30
|
-
const lines = this.getCurrentText().split("\n");
|
|
31
|
-
const insertIndex = afterLine !== undefined ? afterLine : lines.length;
|
|
32
|
-
const contentLines = content.split("\n");
|
|
33
|
-
lines.splice(insertIndex, 0, ...contentLines);
|
|
34
|
-
const newText = lines.join("\n");
|
|
35
|
-
return this.createModified(newText);
|
|
36
|
-
}
|
|
37
|
-
removeLines(startLine, endLine) {
|
|
38
|
-
const lines = this.getCurrentText().split("\n");
|
|
39
|
-
const end = endLine !== undefined ? endLine : startLine;
|
|
40
|
-
lines.splice(startLine, end - startLine + 1);
|
|
41
|
-
const newText = lines.join("\n");
|
|
42
|
-
return this.createModified(newText);
|
|
43
|
-
}
|
|
44
|
-
updateLine(lineNumber, newContent) {
|
|
45
|
-
const lines = this.getCurrentText().split("\n");
|
|
46
|
-
if (lineNumber >= 0 && lineNumber < lines.length) {
|
|
47
|
-
lines[lineNumber] = newContent;
|
|
48
|
-
}
|
|
49
|
-
const newText = lines.join("\n");
|
|
50
|
-
return this.createModified(newText);
|
|
51
|
-
}
|
|
52
|
-
updateNodeByPath(path, newContent) {
|
|
53
|
-
const node = this.resolvePathToNode(path);
|
|
54
|
-
if (!node) {
|
|
55
|
-
throw new Error(`Node not found at path: ${path}`);
|
|
56
|
-
}
|
|
57
|
-
const currentText = this.getCurrentText();
|
|
58
|
-
const lines = currentText.split("\n");
|
|
59
|
-
const startLine = node.startPosition.row;
|
|
60
|
-
const endLine = node.endPosition.row;
|
|
61
|
-
const startCol = node.startPosition.column;
|
|
62
|
-
const endCol = node.endPosition.column;
|
|
63
|
-
if (startLine === endLine) {
|
|
64
|
-
const line = lines[startLine];
|
|
65
|
-
lines[startLine] =
|
|
66
|
-
line.substring(0, startCol) + newContent + line.substring(endCol);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
const firstLine = lines[startLine].substring(0, startCol) + newContent;
|
|
70
|
-
const lastLine = lines[endLine].substring(endCol);
|
|
71
|
-
lines.splice(startLine, endLine - startLine + 1, firstLine + lastLine);
|
|
72
|
-
}
|
|
73
|
-
const newText = lines.join("\n");
|
|
74
|
-
return this.createModified(newText);
|
|
75
|
-
}
|
|
76
|
-
deleteNodeByPath(path) {
|
|
77
|
-
return this.updateNodeByPath(path, "");
|
|
78
|
-
}
|
|
79
|
-
updateNodeBySimplePath(simplePath, newContent) {
|
|
80
|
-
return this.updateNodeByPath(simplePath, newContent);
|
|
81
|
-
}
|
|
82
|
-
findNodesBySimplePath(simplePath) {
|
|
83
|
-
return this.pathResolver.findBySimplePath(this.tree, simplePath);
|
|
84
|
-
}
|
|
85
|
-
getAllSimplePaths() {
|
|
86
|
-
return this.pathResolver.getAllSimplePaths(this.tree);
|
|
87
|
-
}
|
|
88
|
-
resolvePathToNode(path) {
|
|
89
|
-
const simpleMatches = this.pathResolver.findBySimplePath(this.tree, path);
|
|
90
|
-
if (simpleMatches.length > 0) {
|
|
91
|
-
if (simpleMatches.length > 1) {
|
|
92
|
-
throw new Error(`Multiple nodes found for path: ${path}. Found: ${simpleMatches
|
|
93
|
-
.map((m) => m.description)
|
|
94
|
-
.join(", ")}`);
|
|
95
|
-
}
|
|
96
|
-
return simpleMatches[0].node;
|
|
97
|
-
}
|
|
98
|
-
return this.findNodeByPath(path);
|
|
99
|
-
}
|
|
100
|
-
insertBefore(parentPath, content, beforeKinds) {
|
|
101
|
-
const parentNode = this.resolvePathToNode(parentPath);
|
|
102
|
-
if (!parentNode) {
|
|
103
|
-
throw new Error(`No nodes found for path: ${parentPath}`);
|
|
104
|
-
}
|
|
105
|
-
const bodyNode = this.parser.getBodyNode(parentNode);
|
|
106
|
-
if (!bodyNode) {
|
|
107
|
-
throw new Error(`Cannot find body node for path: ${parentPath}`);
|
|
108
|
-
}
|
|
109
|
-
for (const child of bodyNode.children) {
|
|
110
|
-
if (beforeKinds.includes(this.parser.nodeKind(child))) {
|
|
111
|
-
return this.addLines("", content, child.startPosition.row);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return this.appendChild(parentPath, content);
|
|
115
|
-
}
|
|
116
|
-
appendChild(parentPath, content) {
|
|
117
|
-
if (parentPath === "") {
|
|
118
|
-
const current = this.getCurrentText();
|
|
119
|
-
const newText = current + "\n\n" + content;
|
|
120
|
-
return this.createModified(newText);
|
|
121
|
-
}
|
|
122
|
-
const parentNode = this.resolvePathToNode(parentPath);
|
|
123
|
-
if (!parentNode) {
|
|
124
|
-
throw new Error(`No nodes found for path: ${parentPath}`);
|
|
125
|
-
}
|
|
126
|
-
const bodyNode = this.parser.getBodyNode(parentNode);
|
|
127
|
-
if (!bodyNode) {
|
|
128
|
-
throw new Error(`Cannot find body node for path: ${parentPath}`);
|
|
129
|
-
}
|
|
130
|
-
const currentText = this.getCurrentText();
|
|
131
|
-
const lines = currentText.split("\n");
|
|
132
|
-
const endLine = bodyNode.endPosition.row;
|
|
133
|
-
const endCol = bodyNode.endPosition.column;
|
|
134
|
-
const insertLine = endLine;
|
|
135
|
-
const contentLines = content.split("\n");
|
|
136
|
-
const firstNonEmptyLine = contentLines.find((line) => line.trim() !== "");
|
|
137
|
-
const isAlreadyIndented = firstNonEmptyLine && firstNonEmptyLine.startsWith(" ");
|
|
138
|
-
const indentedContent = contentLines
|
|
139
|
-
.map((line, index) => {
|
|
140
|
-
if (line.trim() === "")
|
|
141
|
-
return line;
|
|
142
|
-
if (isAlreadyIndented) {
|
|
143
|
-
return line;
|
|
144
|
-
}
|
|
145
|
-
else {
|
|
146
|
-
return " " + line;
|
|
147
|
-
}
|
|
148
|
-
})
|
|
149
|
-
.join("\n");
|
|
150
|
-
lines.splice(insertLine, 0, indentedContent);
|
|
151
|
-
const newText = lines.join("\n");
|
|
152
|
-
return this.createModified(newText);
|
|
153
|
-
}
|
|
154
|
-
addMethodToClass(className, methodContent) {
|
|
155
|
-
return this.appendChild(className, methodContent);
|
|
156
|
-
}
|
|
157
|
-
addPropertyToClass(className, propertyContent) {
|
|
158
|
-
return this.insertBefore(className, propertyContent, [
|
|
159
|
-
"method",
|
|
160
|
-
"constructor",
|
|
161
|
-
]);
|
|
162
|
-
}
|
|
163
|
-
appendToBlock(blockPath, content) {
|
|
164
|
-
return this.appendChild(blockPath, content);
|
|
165
|
-
}
|
|
166
|
-
updateBlock(blockPath, content) {
|
|
167
|
-
return this.updateNodeByPath(blockPath, content);
|
|
168
|
-
}
|
|
169
|
-
deleteBlock(blockPath) {
|
|
170
|
-
return this.deleteNodeByPath(blockPath);
|
|
171
|
-
}
|
|
172
|
-
getAllNodes(node) {
|
|
173
|
-
const nodes = [node];
|
|
174
|
-
for (let i = 0; i < node.childCount; i++) {
|
|
175
|
-
const child = node.child(i);
|
|
176
|
-
if (child) {
|
|
177
|
-
nodes.push(...this.getAllNodes(child));
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return nodes;
|
|
181
|
-
}
|
|
182
|
-
findPathsForLine(tree, searchText) {
|
|
183
|
-
return this.parser.findPathsForLine(tree, searchText);
|
|
184
|
-
}
|
|
185
|
-
findNodeByPath(path) {
|
|
186
|
-
const parts = path.split("/");
|
|
187
|
-
if (parts.length === 0)
|
|
188
|
-
return null;
|
|
189
|
-
let current = this.tree.rootNode;
|
|
190
|
-
for (const part of parts) {
|
|
191
|
-
const match = part.match(/^(.+)\[(\d+)\]$/);
|
|
192
|
-
if (!match)
|
|
193
|
-
return null;
|
|
194
|
-
const [, nodeType, indexStr] = match;
|
|
195
|
-
const index = parseInt(indexStr, 10);
|
|
196
|
-
if (index >= current.children.length ||
|
|
197
|
-
current.children[index].type !== nodeType) {
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
current = current.children[index];
|
|
201
|
-
}
|
|
202
|
-
return current;
|
|
203
|
-
}
|
|
204
|
-
getCurrentText() {
|
|
205
|
-
if (!this.tree || !this.tree.rootNode) {
|
|
206
|
-
throw new Error("Failed to parse source code. Tree:" + this.tree);
|
|
207
|
-
}
|
|
208
|
-
return this.tree.rootNode.text;
|
|
209
|
-
}
|
|
210
|
-
getTree() {
|
|
211
|
-
return this.tree;
|
|
212
|
-
}
|
|
213
|
-
generateDiff() {
|
|
214
|
-
return (0, diff_1.createPatch)("original", this.originalText, this.getCurrentText(), "original", "modified");
|
|
11
|
+
static fromTree(..._args) {
|
|
12
|
+
throw new Error("Tree-sitter TreeEditor has been moved to @tyvm/knowhow-module-ast.");
|
|
215
13
|
}
|
|
216
14
|
}
|
|
217
15
|
exports.TreeEditor = TreeEditor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../../../src/plugins/tree-sitter/editor.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../../../src/plugins/tree-sitter/editor.ts"],"names":[],"mappings":";;;AAKA,MAAa,UAAU;IACrB,YAAY,GAAG,KAAY;QACzB,MAAM,IAAI,KAAK,CACb,kIAAkI,CACnI,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAY;QAC7B,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAY;QAC7B,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE,CAAC;IACJ,CAAC;CACF;AAhBD,gCAgBC"}
|
|
@@ -1,25 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
export declare class LanguageAgnosticParser {
|
|
2
|
+
static supportsFile(_filePath: string): boolean;
|
|
3
|
+
static supportsLanguage(_language: string): boolean;
|
|
4
|
+
static createParserForFile(_filePath: string): never;
|
|
5
|
+
static createTypeScriptParser(): never;
|
|
6
|
+
static createJavaScriptParser(): never;
|
|
7
|
+
static suportedLanguages(): string[];
|
|
8
|
+
static resolveLanguageName(name: string): string;
|
|
9
|
+
}
|
|
10
|
+
export type Tree = any;
|
|
11
|
+
export type SyntaxNode = any;
|
|
5
12
|
export interface TreeNode {
|
|
6
13
|
type: string;
|
|
7
14
|
text: string;
|
|
8
|
-
startPosition:
|
|
9
|
-
|
|
10
|
-
column: number;
|
|
11
|
-
};
|
|
12
|
-
endPosition: {
|
|
13
|
-
row: number;
|
|
14
|
-
column: number;
|
|
15
|
-
};
|
|
15
|
+
startPosition: any;
|
|
16
|
+
endPosition: any;
|
|
16
17
|
children: TreeNode[];
|
|
17
18
|
}
|
|
18
|
-
export interface LanguageConfig {
|
|
19
|
-
language: any;
|
|
20
|
-
methodDeclarationTypes: string[];
|
|
21
|
-
classDeclarationTypes: string[];
|
|
22
|
-
}
|
|
23
19
|
export interface PathLocation {
|
|
24
20
|
path: string;
|
|
25
21
|
row: number;
|
|
@@ -32,44 +28,13 @@ export interface TreeEdit {
|
|
|
32
28
|
content?: string;
|
|
33
29
|
lineNumber?: number;
|
|
34
30
|
}
|
|
35
|
-
export
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
constructor(language: string);
|
|
40
|
-
static resolveLanguageName(extOrName: string): string;
|
|
41
|
-
static suportedLanguages(): string[];
|
|
42
|
-
static createParserForFile(filePath: string): LanguageAgnosticParser;
|
|
43
|
-
static createTypeScriptParser(): LanguageAgnosticParser;
|
|
44
|
-
static createJavaScriptParser(): LanguageAgnosticParser;
|
|
45
|
-
static supportsLanguage(languageName: string): boolean;
|
|
46
|
-
static supportsFile(filePath: string): boolean;
|
|
47
|
-
private setupFromLanguageName;
|
|
48
|
-
private setupParserForLanguage;
|
|
49
|
-
setLanguagePack(languageName: string): void;
|
|
50
|
-
getLanguagePack(): LanguagePackConfig | undefined;
|
|
51
|
-
getLanguage(): string | undefined;
|
|
52
|
-
nodeKind(node: Parser.SyntaxNode): NormalizedKind;
|
|
53
|
-
applyRule(node: Parser.SyntaxNode, rule: BodyRule, pack: LanguagePackConfig): Parser.SyntaxNode | undefined;
|
|
54
|
-
getBodyNodeWithLanguagePack(node: Parser.SyntaxNode, pack: LanguagePackConfig): Parser.SyntaxNode | undefined;
|
|
55
|
-
getBodyNode(node: Parser.SyntaxNode): Parser.SyntaxNode | null;
|
|
56
|
-
getBodyNodeForLanguage(node: Parser.SyntaxNode, language: string): Parser.SyntaxNode | undefined;
|
|
57
|
-
getNodeKindForLanguage(node: Parser.SyntaxNode, language: string): NormalizedKind;
|
|
58
|
-
parseFile(filePath: string): Parser.Tree;
|
|
59
|
-
parseString(sourceCode: string): Parser.Tree;
|
|
60
|
-
getFileText(tree: Parser.Tree): string;
|
|
61
|
-
findPathsForLine(tree: Parser.Tree, searchText: string): PathLocation[];
|
|
62
|
-
getNodePath(rootNode: Parser.SyntaxNode, targetNode: Parser.SyntaxNode): string;
|
|
63
|
-
nodeToObject(node: Parser.SyntaxNode): TreeNode;
|
|
64
|
-
findNodesByType(tree: Parser.Tree, nodeType: string): Parser.SyntaxNode[];
|
|
65
|
-
getTypesForKind(kind: NormalizedKind): string[];
|
|
66
|
-
findNodesByKind(tree: Parser.Tree, kind: NormalizedKind): Parser.SyntaxNode[];
|
|
67
|
-
findClassDeclarations(tree: Parser.Tree): Parser.SyntaxNode[];
|
|
68
|
-
findMethodDeclarations(tree: Parser.Tree): Parser.SyntaxNode[];
|
|
69
|
-
printTree(node: Parser.SyntaxNode, indent?: string): string;
|
|
70
|
-
findErrorNodes(node: Parser.SyntaxNode): Parser.SyntaxNode[];
|
|
31
|
+
export interface LanguageConfig {
|
|
32
|
+
language: any;
|
|
33
|
+
methodDeclarationTypes: string[];
|
|
34
|
+
classDeclarationTypes: string[];
|
|
71
35
|
}
|
|
72
|
-
export declare function
|
|
36
|
+
export declare function getLanguagePackForLanguage(_languageName: string): undefined;
|
|
37
|
+
export declare function compareTreeStructures(_tree1: any, _tree2: any): {
|
|
73
38
|
differences: string[];
|
|
74
39
|
summary: string;
|
|
75
40
|
};
|
|
@@ -1,310 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.compareTreeStructures = exports.
|
|
7
|
-
const tree_sitter_1 = __importDefault(require("tree-sitter"));
|
|
8
|
-
const tree_sitter_typescript_1 = __importDefault(require("tree-sitter-typescript"));
|
|
9
|
-
const tree_sitter_javascript_1 = __importDefault(require("tree-sitter-javascript"));
|
|
10
|
-
const fs_1 = require("fs");
|
|
11
|
-
const lang_packs_1 = require("./lang-packs");
|
|
12
|
-
function getLanguagePackForLanguage(languageName) {
|
|
13
|
-
const normalizedName = LanguageAgnosticParser.resolveLanguageName(languageName);
|
|
14
|
-
return (0, lang_packs_1.getLanguagePack)(normalizedName);
|
|
15
|
-
}
|
|
16
|
-
exports.getLanguagePackForLanguage = getLanguagePackForLanguage;
|
|
3
|
+
exports.compareTreeStructures = exports.getLanguagePackForLanguage = exports.LanguageAgnosticParser = void 0;
|
|
17
4
|
class LanguageAgnosticParser {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
constructor(language) {
|
|
21
|
-
this.parser = new tree_sitter_1.default();
|
|
22
|
-
this.setupFromLanguageName(language);
|
|
5
|
+
static supportsFile(_filePath) {
|
|
6
|
+
return false;
|
|
23
7
|
}
|
|
24
|
-
static
|
|
25
|
-
|
|
26
|
-
js: "javascript",
|
|
27
|
-
jsx: "javascript",
|
|
28
|
-
ts: "typescript",
|
|
29
|
-
tsx: "typescript",
|
|
30
|
-
javascript: "javascript",
|
|
31
|
-
typescript: "typescript",
|
|
32
|
-
};
|
|
33
|
-
return aliases[extOrName.toLowerCase()] || extOrName;
|
|
34
|
-
}
|
|
35
|
-
static suportedLanguages() {
|
|
36
|
-
return Array.from(new Set(Object.keys(lang_packs_1.languagePacks)));
|
|
8
|
+
static supportsLanguage(_language) {
|
|
9
|
+
return false;
|
|
37
10
|
}
|
|
38
|
-
static createParserForFile(
|
|
39
|
-
|
|
40
|
-
return new LanguageAgnosticParser(ext);
|
|
11
|
+
static createParserForFile(_filePath) {
|
|
12
|
+
throw new Error("Tree-sitter parser has been moved to @tyvm/knowhow-module-ast. Install that package and add it to your knowhow.json modules.");
|
|
41
13
|
}
|
|
42
14
|
static createTypeScriptParser() {
|
|
43
|
-
|
|
15
|
+
throw new Error("Tree-sitter parser has been moved to @tyvm/knowhow-module-ast. Install that package and add it to your knowhow.json modules.");
|
|
44
16
|
}
|
|
45
17
|
static createJavaScriptParser() {
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
static supportsLanguage(languageName) {
|
|
49
|
-
return !!getLanguagePackForLanguage(languageName);
|
|
50
|
-
}
|
|
51
|
-
static supportsFile(filePath) {
|
|
52
|
-
const ext = filePath.split(".").pop()?.toLowerCase();
|
|
53
|
-
return !!getLanguagePackForLanguage(ext || "");
|
|
54
|
-
}
|
|
55
|
-
setupFromLanguageName(languageName) {
|
|
56
|
-
this.setLanguagePack(languageName);
|
|
57
|
-
this.setupParserForLanguage(languageName);
|
|
58
|
-
}
|
|
59
|
-
setupParserForLanguage(languageName) {
|
|
60
|
-
const normalizedName = LanguageAgnosticParser.resolveLanguageName(languageName);
|
|
61
|
-
switch (normalizedName) {
|
|
62
|
-
case "javascript":
|
|
63
|
-
this.parser.setLanguage(tree_sitter_javascript_1.default);
|
|
64
|
-
break;
|
|
65
|
-
case "typescript":
|
|
66
|
-
this.parser.setLanguage(tree_sitter_typescript_1.default.typescript);
|
|
67
|
-
break;
|
|
68
|
-
default:
|
|
69
|
-
throw new Error(`Unsupported language: ${languageName}`);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
setLanguagePack(languageName) {
|
|
73
|
-
const pack = getLanguagePackForLanguage(languageName);
|
|
74
|
-
if (pack) {
|
|
75
|
-
this.currentLanguagePack = pack;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
getLanguagePack() {
|
|
79
|
-
return this.currentLanguagePack;
|
|
80
|
-
}
|
|
81
|
-
getLanguage() {
|
|
82
|
-
return this.currentLanguagePack?.language;
|
|
83
|
-
}
|
|
84
|
-
nodeKind(node) {
|
|
85
|
-
const pack = this.currentLanguagePack;
|
|
86
|
-
return pack.kindMap[node.type] || "unknown";
|
|
87
|
-
}
|
|
88
|
-
applyRule(node, rule, pack) {
|
|
89
|
-
switch (rule.kind) {
|
|
90
|
-
case "self":
|
|
91
|
-
return node;
|
|
92
|
-
case "child":
|
|
93
|
-
if (!rule.nodeType)
|
|
94
|
-
return undefined;
|
|
95
|
-
return node.children.find((child) => child.type === rule.nodeType);
|
|
96
|
-
case "field":
|
|
97
|
-
if (!rule.field)
|
|
98
|
-
return undefined;
|
|
99
|
-
return node.childForFieldName(rule.field);
|
|
100
|
-
case "functionBody":
|
|
101
|
-
return node.children.find((child) => child.type === "statement_block");
|
|
102
|
-
case "callCallbackBody":
|
|
103
|
-
const args = node.childForFieldName("arguments");
|
|
104
|
-
if (!args)
|
|
105
|
-
return undefined;
|
|
106
|
-
const lastArg = args.children[args.children.length - 1];
|
|
107
|
-
if (!lastArg)
|
|
108
|
-
return undefined;
|
|
109
|
-
if (lastArg.type === "arrow_function" ||
|
|
110
|
-
lastArg.type === "function_expression") {
|
|
111
|
-
return this.applyRule(lastArg, { kind: "functionBody" }, pack);
|
|
112
|
-
}
|
|
113
|
-
return lastArg;
|
|
114
|
-
default:
|
|
115
|
-
return undefined;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
getBodyNodeWithLanguagePack(node, pack) {
|
|
119
|
-
const rules = pack.bodyMap[node.type];
|
|
120
|
-
if (!rules || rules.length === 0) {
|
|
121
|
-
return undefined;
|
|
122
|
-
}
|
|
123
|
-
for (const rule of rules) {
|
|
124
|
-
const result = this.applyRule(node, rule, pack);
|
|
125
|
-
if (result) {
|
|
126
|
-
return result;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return undefined;
|
|
130
|
-
}
|
|
131
|
-
getBodyNode(node) {
|
|
132
|
-
if (!this.currentLanguagePack) {
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
const result = this.getBodyNodeWithLanguagePack(node, this.currentLanguagePack);
|
|
136
|
-
return result || null;
|
|
137
|
-
}
|
|
138
|
-
getBodyNodeForLanguage(node, language) {
|
|
139
|
-
const pack = getLanguagePackForLanguage(language.toLowerCase());
|
|
140
|
-
if (!pack)
|
|
141
|
-
return undefined;
|
|
142
|
-
return this.getBodyNodeWithLanguagePack(node, pack);
|
|
18
|
+
throw new Error("Tree-sitter parser has been moved to @tyvm/knowhow-module-ast. Install that package and add it to your knowhow.json modules.");
|
|
143
19
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
if (!pack)
|
|
147
|
-
return "unknown";
|
|
148
|
-
return this.nodeKind(node);
|
|
149
|
-
}
|
|
150
|
-
parseFile(filePath) {
|
|
151
|
-
const sourceCode = (0, fs_1.readFileSync)(filePath, "utf8");
|
|
152
|
-
return this.parser.parse(sourceCode);
|
|
153
|
-
}
|
|
154
|
-
parseString(sourceCode) {
|
|
155
|
-
return this.parser.parse(sourceCode);
|
|
156
|
-
}
|
|
157
|
-
getFileText(tree) {
|
|
158
|
-
return tree.rootNode.text;
|
|
159
|
-
}
|
|
160
|
-
findPathsForLine(tree, searchText) {
|
|
161
|
-
const results = [];
|
|
162
|
-
if (!tree.rootNode)
|
|
163
|
-
return results;
|
|
164
|
-
const sourceText = tree.rootNode.text;
|
|
165
|
-
const lines = sourceText.split("\n");
|
|
166
|
-
lines.forEach((line, lineIndex) => {
|
|
167
|
-
let columnIndex = line.indexOf(searchText);
|
|
168
|
-
while (columnIndex !== -1) {
|
|
169
|
-
const node = tree.rootNode.descendantForPosition({ row: lineIndex, column: columnIndex }, { row: lineIndex, column: columnIndex + searchText.length });
|
|
170
|
-
if (node) {
|
|
171
|
-
const path = this.getNodePath(tree.rootNode, node);
|
|
172
|
-
results.push({
|
|
173
|
-
path,
|
|
174
|
-
row: lineIndex,
|
|
175
|
-
column: columnIndex,
|
|
176
|
-
text: searchText,
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
columnIndex = line.indexOf(searchText, columnIndex + 1);
|
|
180
|
-
}
|
|
181
|
-
});
|
|
182
|
-
return results;
|
|
183
|
-
}
|
|
184
|
-
getNodePath(rootNode, targetNode) {
|
|
185
|
-
const path = [];
|
|
186
|
-
let current = targetNode;
|
|
187
|
-
while (current && current !== rootNode) {
|
|
188
|
-
if (current.parent) {
|
|
189
|
-
const siblings = current.parent.children;
|
|
190
|
-
const index = siblings.indexOf(current);
|
|
191
|
-
path.unshift(`${current.type}[${index}]`);
|
|
192
|
-
current = current.parent;
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
break;
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
return path.join("/");
|
|
199
|
-
}
|
|
200
|
-
nodeToObject(node) {
|
|
201
|
-
return {
|
|
202
|
-
type: node.type,
|
|
203
|
-
text: node.text,
|
|
204
|
-
startPosition: {
|
|
205
|
-
row: node.startPosition.row,
|
|
206
|
-
column: node.startPosition.column,
|
|
207
|
-
},
|
|
208
|
-
endPosition: {
|
|
209
|
-
row: node.endPosition.row,
|
|
210
|
-
column: node.endPosition.column,
|
|
211
|
-
},
|
|
212
|
-
children: node.children.map((child) => this.nodeToObject(child)),
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
findNodesByType(tree, nodeType) {
|
|
216
|
-
const results = [];
|
|
217
|
-
if (!tree.rootNode)
|
|
218
|
-
return results;
|
|
219
|
-
function traverse(node) {
|
|
220
|
-
if (node.type === nodeType) {
|
|
221
|
-
results.push(node);
|
|
222
|
-
}
|
|
223
|
-
for (const child of node.children) {
|
|
224
|
-
traverse(child);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
traverse(tree.rootNode);
|
|
228
|
-
return results;
|
|
229
|
-
}
|
|
230
|
-
getTypesForKind(kind) {
|
|
231
|
-
if (!this.currentLanguagePack)
|
|
232
|
-
return [];
|
|
233
|
-
return Object.entries(this.currentLanguagePack.kindMap)
|
|
234
|
-
.filter(([_, v]) => v === kind)
|
|
235
|
-
.map(([k, _]) => k);
|
|
236
|
-
}
|
|
237
|
-
findNodesByKind(tree, kind) {
|
|
238
|
-
const types = this.getTypesForKind(kind);
|
|
239
|
-
const results = [];
|
|
240
|
-
for (const type of types) {
|
|
241
|
-
results.push(...this.findNodesByType(tree, type));
|
|
242
|
-
}
|
|
243
|
-
return results;
|
|
244
|
-
}
|
|
245
|
-
findClassDeclarations(tree) {
|
|
246
|
-
return this.findNodesByKind(tree, "class");
|
|
247
|
-
}
|
|
248
|
-
findMethodDeclarations(tree) {
|
|
249
|
-
return this.findNodesByKind(tree, "method");
|
|
250
|
-
}
|
|
251
|
-
printTree(node, indent = "") {
|
|
252
|
-
let result = `${indent}${node.type}`;
|
|
253
|
-
if (node.isNamed && node.text.length < 50) {
|
|
254
|
-
result += `: "${node.text.replace(/\n/g, "\\n")}"`;
|
|
255
|
-
}
|
|
256
|
-
result += "\n";
|
|
257
|
-
for (const child of node.children) {
|
|
258
|
-
result += this.printTree(child, indent + " ");
|
|
259
|
-
}
|
|
260
|
-
return result;
|
|
20
|
+
static suportedLanguages() {
|
|
21
|
+
return [];
|
|
261
22
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
function traverse(n) {
|
|
265
|
-
if (n.type === "ERROR" || n.hasError) {
|
|
266
|
-
errorNodes.push(n);
|
|
267
|
-
}
|
|
268
|
-
for (const child of n.children || []) {
|
|
269
|
-
traverse(child);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
traverse(node);
|
|
273
|
-
return errorNodes;
|
|
23
|
+
static resolveLanguageName(name) {
|
|
24
|
+
return name;
|
|
274
25
|
}
|
|
275
26
|
}
|
|
276
27
|
exports.LanguageAgnosticParser = LanguageAgnosticParser;
|
|
277
|
-
function
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
differences.push(`Node removed at ${path}: ${node2.type}`);
|
|
284
|
-
return;
|
|
285
|
-
}
|
|
286
|
-
if (!node2) {
|
|
287
|
-
differences.push(`Node added at ${path}: ${node1.type}`);
|
|
288
|
-
return;
|
|
289
|
-
}
|
|
290
|
-
if (node1.type !== node2.type) {
|
|
291
|
-
differences.push(`Node type changed at ${path}: ${node1.type} -> ${node2.type}`);
|
|
292
|
-
}
|
|
293
|
-
if (node1.text !== node2.text && node1.text.length < 100) {
|
|
294
|
-
differences.push(`Node text changed at ${path} (${node1.type}): "${node1.text}" -> "${node2.text}"`);
|
|
295
|
-
}
|
|
296
|
-
const maxChildren = Math.max(node1.children.length, node2.children.length);
|
|
297
|
-
for (let i = 0; i < maxChildren; i++) {
|
|
298
|
-
const child1 = node1.children[i] || null;
|
|
299
|
-
const child2 = node2.children[i] || null;
|
|
300
|
-
compareNodes(child1, child2, `${path}.${i}`);
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
compareNodes(tree1.rootNode, tree2.rootNode);
|
|
304
|
-
return {
|
|
305
|
-
differences,
|
|
306
|
-
summary: `Found ${differences.length} differences between the two trees`,
|
|
307
|
-
};
|
|
28
|
+
function getLanguagePackForLanguage(_languageName) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
exports.getLanguagePackForLanguage = getLanguagePackForLanguage;
|
|
32
|
+
function compareTreeStructures(_tree1, _tree2) {
|
|
33
|
+
throw new Error("Tree-sitter has been moved to @tyvm/knowhow-module-ast.");
|
|
308
34
|
}
|
|
309
35
|
exports.compareTreeStructures = compareTreeStructures;
|
|
310
36
|
//# sourceMappingURL=parser.js.map
|