@@ -9,51 +9,75 @@ parent: Development
9
9
10
10
If you want to add a new language support, you can follow the steps below:
11
11
12
- 1 . Create a new file in ` src/semantic /${your-newlanguage} ` folder, for example, ` src/semantic /java ` .
12
+ 1 . Create a new file in ` src/code-context /${your-newlanguage} ` folder, for example, ` src/code-context /java ` .
13
13
2 . Implement the following interfaces:
14
- - ` LanguageConfig .ts` , core configuration for the language
15
- - ` RelatedCodeProvider .ts` , which will provider the related code for the code
16
- - ` Structurer .ts` , which will provider the UML for simplifying the code
14
+ - ` LanguageProfile .ts` , core configuration for the language
15
+ - ` RelevantCodeProvider .ts` , which will provider the related code for the code
16
+ - ` BaseStructurerProvider .ts` , which will provider the UML for simplifying the code
17
17
- ` TestGenProvider.ts ` , which will provider the test generation for the code
18
- 3 . Add to ProviderManager, for example:
19
- - RelatedCodeProviderManager
20
- - StructurerProviderManager
21
- - TestGenProviderManager
18
+ 3 . Add to ` ProviderContainer.config.ts ` , for example:
19
+ ``` typescript
20
+ providerContainer .bind (IToolchainContextProvider ).to (SpringContextProvider );
21
+ providerContainer .bind (IToolchainContextProvider ).to (JavaVersionProvider );
22
+
23
+ providerContainer .bind (IRelevantCodeProvider ).to (JavaRelevantCodeProvider );
24
+ providerContainer .bind (ITestGenProvider ).to (JavaTestGenProvider );
25
+ providerContainer .bind (IBuildToolProvider ).to (GradleBuildToolProvider );
26
+ providerContainer .bind (IStructurerProvider ).to (JavaStructurerProvider );
27
+ ```
22
28
23
29
## LanguageConfig
24
30
25
31
``` typescript
26
- export interface LanguageConfig {
32
+ export interface LanguageProfile {
27
33
// A list of language names that can be processed by these node queries
28
- // e.g.: ["typescript ", "typescriptreact "], ["rust "]
34
+ // e.g.: ["Typescript ", "TSX "], ["Rust "]
29
35
languageIds: string [];
30
36
31
37
// Extensions that can help classify the file: .rs, .rb, .cabal
32
38
fileExtensions: string [];
33
39
34
40
// tree-sitter grammar for this language
35
- grammar: (langService : TSLanguageService , langId : SupportedLanguage ) => Promise <Language | undefined >;
41
+ grammar: (langService : ILanguageServiceProvider , langId ? : LanguageIdentifier ) => Promise <Language | undefined >;
36
42
37
43
// Compiled tree-sitter node query for this language.
38
44
scopeQuery: MemoizedQuery ;
39
45
40
46
// Compiled tree-sitter hoverables query
41
47
hoverableQuery: MemoizedQuery ;
42
48
49
+ // in java, the canonical name is the package name
50
+ packageQuery? : MemoizedQuery ;
51
+
43
52
// class query
44
53
classQuery: MemoizedQuery ;
45
54
46
55
// method query
47
56
methodQuery: MemoizedQuery ;
48
57
58
+ blockCommentQuery: MemoizedQuery ;
59
+
49
60
// method input and output query
50
61
methodIOQuery? : MemoizedQuery ;
51
62
63
+ fieldQuery? : MemoizedQuery ;
64
+
52
65
// structurer query
53
66
structureQuery: MemoizedQuery ;
54
67
55
68
// Namespaces defined by this language,
56
69
// E.g.: type namespace, variable namespace, function namespace
57
70
namespaces: NameSpaces ;
71
+
72
+ // should select parent
73
+ // for example, in JavaScript/TypeScript, if we select function, we should also select the export keyword.
74
+ autoSelectInsideParent: string [];
75
+
76
+ // / for IO analysis
77
+ builtInTypes: string [];
78
+
79
+ // should return true if the file is a test file
80
+ isTestFile: (filePath : string ) => boolean ;
58
81
}
82
+
59
83
```
0 commit comments