Skip to content

Commit fa0aefc

Browse files
authored
Merge pull request #1403 from dodona-edu/fix/tree-sitter-detection
Fix detecting tree-sitter parsers
2 parents 93b09fa + 5538e34 commit fa0aefc

File tree

4 files changed

+25
-2
lines changed

4 files changed

+25
-2
lines changed

lib/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
"ava": "5.3.1",
3535
"eslint": "8.53.0",
3636
"node-gyp": "^9.4.1",
37-
"typescript": "5.2.2"
37+
"typescript": "5.2.2",
38+
"tree-sitter-json": "0.20.2"
3839
},
3940
"dependencies": {
4041
"@dodona/dolos-parsers": "1.0.0",

lib/src/lib/language.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,12 @@ export class ProgrammingLanguage extends Language {
4343
if (this.languageModule === undefined) {
4444
// @ts-ignore
4545
this.languageModule = (await import("@dodona/dolos-parsers")).default[this.name];
46+
this.languageModule ||= (await import(`tree-sitter-${this.name}`)).default;
4647
if (this.languageModule === undefined) {
47-
throw new LanguageError("Could not find language module for: " + this.name);
48+
throw new LanguageError(
49+
`Could not find language module for ${this.name}, ` +
50+
`searched in @dodona/dolos-parsers and tree-sitter-${this.name}`
51+
);
4852
}
4953
}
5054
return this.languageModule;

lib/src/test/tokenizer.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,14 @@ test("language picker should detect most common language", t => {
6262
const detected = new LanguagePicker().detectLanguage(files);
6363
t.deepEqual(detected.name, "python");
6464
});
65+
66+
test("should be able to use external tree-sitter parsers (tree-sitter-json)", async t => {
67+
const file = (await readPath("./package.json")).ok();
68+
const language = await (new LanguagePicker().findLanguage("json"));
69+
70+
const tokenizer = await language.createTokenizer();
71+
t.truthy(tokenizer);
72+
73+
const { tokens } = tokenizer.tokenizeFile(file);
74+
t.truthy(tokens);
75+
});

yarn.lock

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4114,6 +4114,13 @@ tree-sitter-cli@^0.20.8:
41144114
resolved "https://registry.yarnpkg.com/tree-sitter-cli/-/tree-sitter-cli-0.20.8.tgz#06a81cea8d6d82f93d67eed7d28b6bc04a4a8916"
41154115
integrity sha512-XjTcS3wdTy/2cc/ptMLc/WRyOLECRYcMTrSWyhZnj1oGSOWbHLTklgsgRICU3cPfb0vy+oZCC33M43u6R1HSCA==
41164116

4117+
tree-sitter-json@0.20.2:
4118+
version "0.20.2"
4119+
resolved "https://registry.yarnpkg.com/tree-sitter-json/-/tree-sitter-json-0.20.2.tgz#8909ffb7149120daa72f9cadb63e8a214f1e5aba"
4120+
integrity sha512-eUxrowp4F1QEGk/i7Sa+Xl8Crlfp7J0AXxX1QdJEQKQYMWhgMbCIgyQvpO3Q0P9oyTrNQxRLlRipDS44a8EtRw==
4121+
dependencies:
4122+
nan "^2.18.0"
4123+
41174124
tree-sitter@^0.20.6:
41184125
version "0.20.6"
41194126
resolved "https://registry.yarnpkg.com/tree-sitter/-/tree-sitter-0.20.6.tgz#fec52e5d7cc6c583135756479f2440dd89b25cbe"

0 commit comments

Comments
 (0)