@oisheek_c/codeforge 1.0.1
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/LICENSE +0 -0
- package/README.md +7 -0
- package/apps/cli/bin/codeforge.cmd +2 -0
- package/apps/cli/src/bootstrap.js +115 -0
- package/apps/cli/src/cli.js +189 -0
- package/apps/cli/src/dev/git.js +17 -0
- package/apps/cli/src/dev/index.js +68 -0
- package/apps/cli/src/dev/provider.js +48 -0
- package/apps/cli/src/dev/scanner.js +14 -0
- package/apps/cli/src/index.js +31 -0
- package/bin/codeforge.js +2 -0
- package/package.json +63 -0
- package/packages/agent/contextBuilder.js +234 -0
- package/packages/agent/executor.js +1729 -0
- package/packages/agent/fallback.js +129 -0
- package/packages/agent/index.js +26 -0
- package/packages/agent/intent.js +73 -0
- package/packages/agent/modelSelector.js +469 -0
- package/packages/agent/planner.js +379 -0
- package/packages/agent/rag.js +412 -0
- package/packages/agent/ragSelector.js +570 -0
- package/packages/agent/router.js +121 -0
- package/packages/agent/thinking.js +54 -0
- package/packages/agent/toolCalls.js +258 -0
- package/packages/config/config.js +391 -0
- package/packages/config/defaults.js +72 -0
- package/packages/config/index.js +2 -0
- package/packages/core/approvalPolicy.js +140 -0
- package/packages/core/context.js +0 -0
- package/packages/core/message.js +0 -0
- package/packages/core/plan.js +0 -0
- package/packages/core/reasoning.js +0 -0
- package/packages/core/result.js +0 -0
- package/packages/core/retrieval.js +0 -0
- package/packages/core/tool.js +536 -0
- package/packages/git/branch.js +7 -0
- package/packages/git/commit.js +16 -0
- package/packages/git/diff.js +15 -0
- package/packages/git/git.js +35 -0
- package/packages/git/index.js +6 -0
- package/packages/git/remote.js +9 -0
- package/packages/git/status.js +11 -0
- package/packages/memory/index.js +0 -0
- package/packages/memory/project.js +0 -0
- package/packages/memory/session.js +0 -0
- package/packages/prompts/builder.js +43 -0
- package/packages/prompts/coder.js +38 -0
- package/packages/prompts/index.js +5 -0
- package/packages/prompts/planner.js +49 -0
- package/packages/prompts/reviewer.js +38 -0
- package/packages/prompts/system.js +94 -0
- package/packages/providers/index.js +31 -0
- package/packages/providers/openrouter.js +380 -0
- package/packages/reasoning/budget.js +0 -0
- package/packages/reasoning/chain.js +0 -0
- package/packages/reasoning/coder.js +0 -0
- package/packages/reasoning/evaluator.js +0 -0
- package/packages/reasoning/index.js +8 -0
- package/packages/reasoning/planner.js +0 -0
- package/packages/reasoning/reflector.js +0 -0
- package/packages/reasoning/reviewer.js +0 -0
- package/packages/reasoning/router.js +0 -0
- package/packages/retrieval/budget.js +92 -0
- package/packages/retrieval/cache.js +84 -0
- package/packages/retrieval/embeddings.js +147 -0
- package/packages/retrieval/graph.js +151 -0
- package/packages/retrieval/imports.js +74 -0
- package/packages/retrieval/index.js +9 -0
- package/packages/retrieval/parser/extractors/calls.js +43 -0
- package/packages/retrieval/parser/extractors/comments.js +49 -0
- package/packages/retrieval/parser/extractors/diagnostics.js +21 -0
- package/packages/retrieval/parser/extractors/exports.js +71 -0
- package/packages/retrieval/parser/extractors/imports.js +40 -0
- package/packages/retrieval/parser/extractors/index.js +12 -0
- package/packages/retrieval/parser/extractors/metrics.js +78 -0
- package/packages/retrieval/parser/extractors/symbols.js +51 -0
- package/packages/retrieval/parser/extractors/todos.js +53 -0
- package/packages/retrieval/parser/helpers.js +138 -0
- package/packages/retrieval/parser/index.js +10 -0
- package/packages/retrieval/parser/languages/c.js +14 -0
- package/packages/retrieval/parser/languages/cpp.js +21 -0
- package/packages/retrieval/parser/languages/csharp.js +14 -0
- package/packages/retrieval/parser/languages/go.js +14 -0
- package/packages/retrieval/parser/languages/index.js +12 -0
- package/packages/retrieval/parser/languages/java.js +14 -0
- package/packages/retrieval/parser/languages/javascript.js +14 -0
- package/packages/retrieval/parser/languages/php.js +14 -0
- package/packages/retrieval/parser/languages/python.js +14 -0
- package/packages/retrieval/parser/languages/ruby.js +14 -0
- package/packages/retrieval/parser/languages/rust.js +14 -0
- package/packages/retrieval/parser/languages/swift.js +14 -0
- package/packages/retrieval/parser/languages/typescript.js +14 -0
- package/packages/retrieval/parser/languages.js +218 -0
- package/packages/retrieval/parser/parseFile.js +79 -0
- package/packages/retrieval/parser/parseRepository.js +78 -0
- package/packages/retrieval/parser/queries/c.js +148 -0
- package/packages/retrieval/parser/queries/cpp.js +198 -0
- package/packages/retrieval/parser/queries/csharp.js +151 -0
- package/packages/retrieval/parser/queries/go.js +124 -0
- package/packages/retrieval/parser/queries/index.js +35 -0
- package/packages/retrieval/parser/queries/java.js +128 -0
- package/packages/retrieval/parser/queries/javascript.js +181 -0
- package/packages/retrieval/parser/queries/php.js +140 -0
- package/packages/retrieval/parser/queries/python.js +110 -0
- package/packages/retrieval/parser/queries/ruby.js +105 -0
- package/packages/retrieval/parser/queries/rust.js +175 -0
- package/packages/retrieval/parser/queries/swift.js +134 -0
- package/packages/retrieval/parser/queries/typescript.js +202 -0
- package/packages/retrieval/parser/registry.js +107 -0
- package/packages/retrieval/parser/traverse.js +82 -0
- package/packages/retrieval/parser/types.js +239 -0
- package/packages/retrieval/parser.js +78 -0
- package/packages/retrieval/ranker.js +73 -0
- package/packages/retrieval/retriever.js +910 -0
- package/packages/retrieval/symbols.js +145 -0
- package/packages/scanner/detect.js +69 -0
- package/packages/scanner/ignore.js +12 -0
- package/packages/scanner/index.js +2 -0
- package/packages/scanner/root.js +21 -0
- package/packages/scanner/scanner.js +35 -0
- package/packages/scanner/tree.js +45 -0
- package/packages/terminal/activity.js +514 -0
- package/packages/terminal/banner.js +34 -0
- package/packages/terminal/colors.js +16 -0
- package/packages/terminal/dashboard.js +94 -0
- package/packages/terminal/index.js +19 -0
- package/packages/terminal/logger.js +43 -0
- package/packages/terminal/prompt.js +11 -0
- package/packages/terminal/renderer.js +1209 -0
- package/packages/terminal/spinner.js +9 -0
- package/packages/tools/editFile.js +261 -0
- package/packages/tools/filesystem.js +82 -0
- package/packages/tools/index.js +24 -0
- package/packages/tools/readFile.js +101 -0
- package/packages/tools/registry.js +227 -0
- package/packages/tools/searchFiles.js +322 -0
- package/packages/tools/shell.js +352 -0
- package/packages/tools/writeFile.js +212 -0
- package/packages/utils/constants.js +0 -0
- package/packages/utils/helpers.js +0 -0
- package/packages/utils/logger.js +0 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/retrieval/parser/extractors/exports.js
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
iterateCaptures,
|
|
7
|
+
getNodeLocation,
|
|
8
|
+
getNodeText,
|
|
9
|
+
} from "../helpers.js";
|
|
10
|
+
|
|
11
|
+
import { createExport } from "../types.js";
|
|
12
|
+
|
|
13
|
+
export default function extractExports({
|
|
14
|
+
query,
|
|
15
|
+
tree,
|
|
16
|
+
source,
|
|
17
|
+
}) {
|
|
18
|
+
const exportsList = [];
|
|
19
|
+
|
|
20
|
+
if (!query) {
|
|
21
|
+
return exportsList;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
for (const { node, name } of iterateCaptures(query, tree)) {
|
|
25
|
+
if (
|
|
26
|
+
!name ||
|
|
27
|
+
!name.startsWith("export.")
|
|
28
|
+
) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const exportName =
|
|
33
|
+
typeof node?.text === "string"
|
|
34
|
+
? node.text.trim()
|
|
35
|
+
: "";
|
|
36
|
+
|
|
37
|
+
if (!exportName) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const kind =
|
|
42
|
+
name.replace(/^export\./, "");
|
|
43
|
+
|
|
44
|
+
exportsList.push(
|
|
45
|
+
createExport({
|
|
46
|
+
name: exportName,
|
|
47
|
+
|
|
48
|
+
kind,
|
|
49
|
+
|
|
50
|
+
default:
|
|
51
|
+
kind === "default",
|
|
52
|
+
|
|
53
|
+
exported:
|
|
54
|
+
exportName,
|
|
55
|
+
|
|
56
|
+
location:
|
|
57
|
+
getNodeLocation(node),
|
|
58
|
+
|
|
59
|
+
metadata: {
|
|
60
|
+
text:
|
|
61
|
+
getNodeText(
|
|
62
|
+
node,
|
|
63
|
+
source
|
|
64
|
+
),
|
|
65
|
+
},
|
|
66
|
+
})
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return exportsList;
|
|
71
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/retrieval/parser/extractors/imports.js
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
iterateCaptures,
|
|
7
|
+
getNodeLocation,
|
|
8
|
+
getNodeText,
|
|
9
|
+
} from "../helpers.js";
|
|
10
|
+
|
|
11
|
+
import { createImport } from "../types.js";
|
|
12
|
+
|
|
13
|
+
export default function extractImports({
|
|
14
|
+
query,
|
|
15
|
+
tree,
|
|
16
|
+
source,
|
|
17
|
+
}) {
|
|
18
|
+
const imports = [];
|
|
19
|
+
|
|
20
|
+
if (!query) {
|
|
21
|
+
return imports;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
for (const { node } of iterateCaptures(query, tree)) {
|
|
25
|
+
imports.push(
|
|
26
|
+
createImport({
|
|
27
|
+
// The Tree-sitter query should capture only the module/source node.
|
|
28
|
+
source: node.text,
|
|
29
|
+
|
|
30
|
+
location: getNodeLocation(node),
|
|
31
|
+
|
|
32
|
+
metadata: {
|
|
33
|
+
text: getNodeText(node, source),
|
|
34
|
+
},
|
|
35
|
+
})
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return imports;
|
|
40
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/retrieval/parser/extractors/index.js
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export { default as symbols } from "./symbols.js";
|
|
6
|
+
export { default as imports } from "./imports.js";
|
|
7
|
+
export { default as exports } from "./exports.js";
|
|
8
|
+
export { default as calls } from "./calls.js";
|
|
9
|
+
export { default as comments } from "./comments.js";
|
|
10
|
+
export { default as todos } from "./todos.js";
|
|
11
|
+
export { default as diagnostics } from "./diagnostics.js";
|
|
12
|
+
export { default as metrics } from "./metrics.js";
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/retrieval/parser/extractors/metrics.js
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { createMetrics } from "../types.js";
|
|
6
|
+
|
|
7
|
+
export default function extractMetrics({
|
|
8
|
+
source,
|
|
9
|
+
symbols = [],
|
|
10
|
+
imports = [],
|
|
11
|
+
exports = [],
|
|
12
|
+
todos = [],
|
|
13
|
+
}) {
|
|
14
|
+
const lines = source.split(/\r?\n/);
|
|
15
|
+
|
|
16
|
+
let code = 0;
|
|
17
|
+
let comments = 0;
|
|
18
|
+
let blanks = 0;
|
|
19
|
+
|
|
20
|
+
for (const line of lines) {
|
|
21
|
+
const text = line.trim();
|
|
22
|
+
|
|
23
|
+
if (!text) {
|
|
24
|
+
blanks++;
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (
|
|
29
|
+
text.startsWith("//") ||
|
|
30
|
+
text.startsWith("#") ||
|
|
31
|
+
text.startsWith("/*") ||
|
|
32
|
+
text.startsWith("*") ||
|
|
33
|
+
text.startsWith("--")
|
|
34
|
+
) {
|
|
35
|
+
comments++;
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
code++;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const functions = symbols.filter(
|
|
43
|
+
(s) => s.kind === "function"
|
|
44
|
+
).length;
|
|
45
|
+
|
|
46
|
+
const classes = symbols.filter(
|
|
47
|
+
(s) =>
|
|
48
|
+
s.kind === "class" ||
|
|
49
|
+
s.kind === "interface" ||
|
|
50
|
+
s.kind === "struct" ||
|
|
51
|
+
s.kind === "trait"
|
|
52
|
+
).length;
|
|
53
|
+
|
|
54
|
+
const methods = symbols.filter(
|
|
55
|
+
(s) => s.kind === "method"
|
|
56
|
+
).length;
|
|
57
|
+
|
|
58
|
+
return createMetrics({
|
|
59
|
+
lines: lines.length,
|
|
60
|
+
|
|
61
|
+
code,
|
|
62
|
+
comments,
|
|
63
|
+
blanks,
|
|
64
|
+
|
|
65
|
+
functions,
|
|
66
|
+
classes,
|
|
67
|
+
methods,
|
|
68
|
+
|
|
69
|
+
imports: imports.length,
|
|
70
|
+
|
|
71
|
+
exports: exports.length,
|
|
72
|
+
|
|
73
|
+
todos: todos.length,
|
|
74
|
+
|
|
75
|
+
// Placeholder until we implement CFG/cyclomatic analysis
|
|
76
|
+
complexity: functions,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/retrieval/parser/extractors/symbols.js
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
iterateCaptures,
|
|
7
|
+
createId,
|
|
8
|
+
getNodeLocation,
|
|
9
|
+
getNodeText,
|
|
10
|
+
normalizeCapture,
|
|
11
|
+
} from "../helpers.js";
|
|
12
|
+
|
|
13
|
+
import { createSymbol } from "../types.js";
|
|
14
|
+
|
|
15
|
+
export default function extractSymbols({
|
|
16
|
+
query,
|
|
17
|
+
tree,
|
|
18
|
+
source,
|
|
19
|
+
file,
|
|
20
|
+
language,
|
|
21
|
+
}) {
|
|
22
|
+
const symbols = [];
|
|
23
|
+
|
|
24
|
+
if (!query) return symbols;
|
|
25
|
+
|
|
26
|
+
for (const capture of iterateCaptures(query, tree)) {
|
|
27
|
+
const node = capture.node;
|
|
28
|
+
|
|
29
|
+
symbols.push(
|
|
30
|
+
createSymbol({
|
|
31
|
+
id: createId(),
|
|
32
|
+
|
|
33
|
+
name: node.text,
|
|
34
|
+
|
|
35
|
+
kind: normalizeCapture(capture.name),
|
|
36
|
+
|
|
37
|
+
language,
|
|
38
|
+
|
|
39
|
+
file,
|
|
40
|
+
|
|
41
|
+
location: getNodeLocation(node),
|
|
42
|
+
|
|
43
|
+
metadata: {
|
|
44
|
+
text: getNodeText(node, source),
|
|
45
|
+
},
|
|
46
|
+
})
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return symbols;
|
|
51
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/retrieval/parser/extractors/todos.js
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
iterateCaptures,
|
|
7
|
+
getNodeLocation,
|
|
8
|
+
getNodeText,
|
|
9
|
+
} from "../helpers.js";
|
|
10
|
+
|
|
11
|
+
import { createTodo } from "../types.js";
|
|
12
|
+
|
|
13
|
+
const TODO_PATTERN = /\b(TODO|FIXME|BUG|HACK|NOTE|XXX)\b[:\-\s]?(.*)/i;
|
|
14
|
+
|
|
15
|
+
export default function extractTodos({
|
|
16
|
+
query,
|
|
17
|
+
tree,
|
|
18
|
+
source,
|
|
19
|
+
}) {
|
|
20
|
+
const todos = [];
|
|
21
|
+
|
|
22
|
+
if (!query) {
|
|
23
|
+
return todos;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
for (const { node } of iterateCaptures(query, tree)) {
|
|
27
|
+
const text = getNodeText(node, source);
|
|
28
|
+
|
|
29
|
+
const match = text.match(TODO_PATTERN);
|
|
30
|
+
|
|
31
|
+
if (!match) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
todos.push(
|
|
36
|
+
createTodo({
|
|
37
|
+
type: match[1].toUpperCase(),
|
|
38
|
+
|
|
39
|
+
text: match[2]?.trim() ?? "",
|
|
40
|
+
|
|
41
|
+
line: node.startPosition.row + 1,
|
|
42
|
+
|
|
43
|
+
metadata: {
|
|
44
|
+
raw: text,
|
|
45
|
+
},
|
|
46
|
+
|
|
47
|
+
location: getNodeLocation(node),
|
|
48
|
+
})
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return todos;
|
|
53
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* packages/retrieval/parser/helpers.js
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import crypto from "node:crypto";
|
|
6
|
+
import { createLocation } from "./types.js";
|
|
7
|
+
|
|
8
|
+
/* -------------------------------------------------------------------------- */
|
|
9
|
+
/* IDs */
|
|
10
|
+
/* -------------------------------------------------------------------------- */
|
|
11
|
+
|
|
12
|
+
export function createId() {
|
|
13
|
+
return crypto.randomUUID();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* -------------------------------------------------------------------------- */
|
|
17
|
+
/* Node Text */
|
|
18
|
+
/* -------------------------------------------------------------------------- */
|
|
19
|
+
|
|
20
|
+
export function getNodeText(node, source) {
|
|
21
|
+
if (!node) return "";
|
|
22
|
+
|
|
23
|
+
return source.slice(node.startIndex, node.endIndex);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* -------------------------------------------------------------------------- */
|
|
27
|
+
/* Node Name */
|
|
28
|
+
/* -------------------------------------------------------------------------- */
|
|
29
|
+
|
|
30
|
+
export function getNodeName(node) {
|
|
31
|
+
return node?.text ?? "";
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* -------------------------------------------------------------------------- */
|
|
35
|
+
/* Location */
|
|
36
|
+
/* -------------------------------------------------------------------------- */
|
|
37
|
+
|
|
38
|
+
export function getNodeLocation(node) {
|
|
39
|
+
if (!node) return createLocation();
|
|
40
|
+
|
|
41
|
+
return createLocation({
|
|
42
|
+
startLine: node.startPosition.row + 1,
|
|
43
|
+
startColumn: node.startPosition.column + 1,
|
|
44
|
+
|
|
45
|
+
endLine: node.endPosition.row + 1,
|
|
46
|
+
endColumn: node.endPosition.column + 1,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/* -------------------------------------------------------------------------- */
|
|
51
|
+
/* Capture Helpers */
|
|
52
|
+
/* -------------------------------------------------------------------------- */
|
|
53
|
+
|
|
54
|
+
export function normalizeCapture(name = "") {
|
|
55
|
+
return name.replace(/^symbol\./, "");
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function isSymbolCapture(name) {
|
|
59
|
+
return name.startsWith("symbol.");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function isImportCapture(name) {
|
|
63
|
+
return name === "import";
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function isExportCapture(name) {
|
|
67
|
+
return name === "export";
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function isCallCapture(name) {
|
|
71
|
+
return name === "call";
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function isCommentCapture(name) {
|
|
75
|
+
return name === "comment";
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function isTodoCapture(name) {
|
|
79
|
+
return name === "todo";
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/* -------------------------------------------------------------------------- */
|
|
83
|
+
/* Query Execution */
|
|
84
|
+
/* -------------------------------------------------------------------------- */
|
|
85
|
+
|
|
86
|
+
export function runQuery(query, tree) {
|
|
87
|
+
if (!query) return [];
|
|
88
|
+
|
|
89
|
+
return query.matches(tree.rootNode);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export function* iterateCaptures(query, tree) {
|
|
93
|
+
for (const match of runQuery(query, tree)) {
|
|
94
|
+
for (const capture of match.captures) {
|
|
95
|
+
yield {
|
|
96
|
+
node: capture.node,
|
|
97
|
+
name: capture.name,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/* -------------------------------------------------------------------------- */
|
|
104
|
+
/* Tree Helpers */
|
|
105
|
+
/* -------------------------------------------------------------------------- */
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
export function getParent(node) {
|
|
109
|
+
return node?.parent ?? null;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function isTopLevel(node) {
|
|
113
|
+
if (!node) return false;
|
|
114
|
+
|
|
115
|
+
const parent = node.parent;
|
|
116
|
+
|
|
117
|
+
return (
|
|
118
|
+
!parent ||
|
|
119
|
+
parent.type === "program" ||
|
|
120
|
+
parent.type === "module"
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/* -------------------------------------------------------------------------- */
|
|
125
|
+
/* Utilities */
|
|
126
|
+
/* -------------------------------------------------------------------------- */
|
|
127
|
+
|
|
128
|
+
export function unique(array) {
|
|
129
|
+
return [...new Set(array)];
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
export function hasErrors(tree) {
|
|
133
|
+
return tree.rootNode.hasError;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export function getRoot(tree) {
|
|
137
|
+
return tree.rootNode;
|
|
138
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import CPP from "tree-sitter-cpp";
|
|
2
|
+
import * as queries from "../queries/cpp.js";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
id: "cpp",
|
|
6
|
+
|
|
7
|
+
grammar: CPP,
|
|
8
|
+
|
|
9
|
+
queries,
|
|
10
|
+
|
|
11
|
+
extensions: [
|
|
12
|
+
".cpp",
|
|
13
|
+
".cc",
|
|
14
|
+
".cxx",
|
|
15
|
+
".hpp",
|
|
16
|
+
".hh",
|
|
17
|
+
".hxx",
|
|
18
|
+
],
|
|
19
|
+
|
|
20
|
+
aliases: ["cpp", "c++"],
|
|
21
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export { default as javascript } from "./javascript.js";
|
|
2
|
+
export { default as typescript } from "./typescript.js";
|
|
3
|
+
export { default as python } from "./python.js";
|
|
4
|
+
export { default as java } from "./java.js";
|
|
5
|
+
export { default as go } from "./go.js";
|
|
6
|
+
export { default as rust } from "./rust.js";
|
|
7
|
+
export { default as c } from "./c.js";
|
|
8
|
+
export { default as cpp } from "./cpp.js";
|
|
9
|
+
export { default as csharp } from "./csharp.js";
|
|
10
|
+
export { default as php } from "./php.js";
|
|
11
|
+
export { default as ruby } from "./ruby.js";
|
|
12
|
+
export { default as swift } from "./swift.js";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import JavaScript from "tree-sitter-javascript";
|
|
2
|
+
import * as queries from "../queries/javascript.js";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
id: "javascript",
|
|
6
|
+
|
|
7
|
+
grammar: JavaScript,
|
|
8
|
+
|
|
9
|
+
queries,
|
|
10
|
+
|
|
11
|
+
extensions: [".js", ".mjs", ".cjs"],
|
|
12
|
+
|
|
13
|
+
aliases: ["javascript", "js"],
|
|
14
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import TypeScript from "tree-sitter-typescript";
|
|
2
|
+
import * as queries from "../queries/typescript.js";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
id: "typescript",
|
|
6
|
+
|
|
7
|
+
grammar: TypeScript.typescript,
|
|
8
|
+
|
|
9
|
+
queries,
|
|
10
|
+
|
|
11
|
+
extensions: [".ts", ".mts", ".cts"],
|
|
12
|
+
|
|
13
|
+
aliases: ["typescript", "ts"],
|
|
14
|
+
};
|