Skip to content

Commit 312d986

Browse files
committed
Merge branch 'master' of https://github.com/unit-mesh/auto-dev-vscode into NewMaster
2 parents 5f36e14 + 21e66a3 commit 312d986

File tree

2 files changed

+39
-11
lines changed

2 files changed

+39
-11
lines changed

docs/development/dev-new-language.md

+35-11
Original file line numberDiff line numberDiff line change
@@ -9,51 +9,75 @@ parent: Development
99

1010
If you want to add a new language support, you can follow the steps below:
1111

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`.
1313
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
1717
- `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+
```
2228

2329
## LanguageConfig
2430

2531
```typescript
26-
export interface LanguageConfig {
32+
export interface LanguageProfile {
2733
// 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"]
2935
languageIds: string[];
3036

3137
// Extensions that can help classify the file: .rs, .rb, .cabal
3238
fileExtensions: string[];
3339

3440
// tree-sitter grammar for this language
35-
grammar: (langService: TSLanguageService, langId: SupportedLanguage) => Promise<Language | undefined>;
41+
grammar: (langService: ILanguageServiceProvider, langId?: LanguageIdentifier) => Promise<Language | undefined>;
3642

3743
// Compiled tree-sitter node query for this language.
3844
scopeQuery: MemoizedQuery;
3945

4046
// Compiled tree-sitter hoverables query
4147
hoverableQuery: MemoizedQuery;
4248

49+
// in java, the canonical name is the package name
50+
packageQuery?: MemoizedQuery;
51+
4352
// class query
4453
classQuery: MemoizedQuery;
4554

4655
// method query
4756
methodQuery: MemoizedQuery;
4857

58+
blockCommentQuery: MemoizedQuery;
59+
4960
// method input and output query
5061
methodIOQuery?: MemoizedQuery;
5162

63+
fieldQuery?: MemoizedQuery;
64+
5265
// structurer query
5366
structureQuery: MemoizedQuery;
5467

5568
// Namespaces defined by this language,
5669
// E.g.: type namespace, variable namespace, function namespace
5770
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;
5881
}
82+
5983
```

src/base/node/tree-sitter/treeSitterLoader.ts

+4
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,10 @@ export class TreeSitterLoader {
9595
return readFile(pathFactory(languageId));
9696
}
9797

98+
if (languageId === 'csharp') {
99+
languageId = 'c_sharp';
100+
}
101+
98102
return readFile(formatWasmFileName(pathTemplate || WASM_FILE_PATH_TEMPLATE, languageId));
99103
}
100104

0 commit comments

Comments
 (0)