Skip to content

Commit 23ae00e

Browse files
author
zhaoge
committed
feat: support custom references and definitions setting
1 parent 03f26f7 commit 23ae00e

11 files changed

+124
-49
lines changed

src/languageFeatures.ts

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import type { ParseError } from 'dt-sql-parser';
2-
import { EntityContext } from 'dt-sql-parser/dist/parser/common/entityCollector';
2+
import {
3+
EntityContext,
4+
} from 'dt-sql-parser/dist/parser/common/entityCollector';
35
import { WordPosition } from 'dt-sql-parser/dist/parser/common/textAndWord';
46
import * as monaco from 'monaco-editor';
57

@@ -13,7 +15,7 @@ import {
1315
MarkerSeverity,
1416
Position,
1517
Range,
16-
Uri
18+
Uri,
1719
} from './fillers/monaco-editor-core';
1820
import type { LanguageServiceDefaults } from './monaco.contribution';
1921

@@ -203,17 +205,24 @@ export class CompletionAdapter<T extends BaseSQLWorker>
203205
}
204206

205207
export class DefinitionAdapter<T extends BaseSQLWorker> implements languages.DefinitionProvider {
206-
constructor(private readonly _worker: WorkerAccessor<T>) {}
208+
constructor(
209+
private readonly _worker: WorkerAccessor<T>,
210+
private readonly _defaults: LanguageServiceDefaults) {}
207211
provideDefinition(
208212
model: editor.IReadOnlyModel,
209-
position: Position
213+
position: Position,
214+
_token: CancellationToken
210215
): languages.ProviderResult<languages.Definition | languages.LocationLink[]> {
211216
const resource = model.uri;
212217
const lineContent = model.getLineContent(position.lineNumber);
213218
if (lineContent.startsWith('--')) return null;
214219
return this._worker(resource)
215220
.then((worker) => {
216-
return worker.getAllEntities(model.getValue());
221+
let code = model?.getValue() || '';
222+
if (typeof this._defaults.preprocessCode === 'function') {
223+
code = this._defaults.preprocessCode(code);
224+
}
225+
return worker.getAllEntities(code);
217226
})
218227
.then((entities) => {
219228
const word = model.getWordAtPosition(position);
@@ -249,17 +258,26 @@ export class DefinitionAdapter<T extends BaseSQLWorker> implements languages.Def
249258
}
250259

251260
export class ReferenceAdapter<T extends BaseSQLWorker> implements languages.ReferenceProvider {
252-
constructor(private readonly _worker: WorkerAccessor<T>) {}
261+
constructor(
262+
private readonly _worker: WorkerAccessor<T>,
263+
private readonly _defaults: LanguageServiceDefaults
264+
) {}
253265
provideReferences(
254266
model: editor.IReadOnlyModel,
255-
position: Position
267+
position: Position,
268+
_context: languages.ReferenceContext,
269+
_token: CancellationToken
256270
): languages.ProviderResult<languages.Location[]> {
257271
const resource = model.uri;
258272
const lineContent = model.getLineContent(position.lineNumber);
259-
if (!lineContent.startsWith('CREATE')) return null;
273+
if (!lineContent.startsWith('CREATE')) return;
260274
return this._worker(resource)
261275
.then((worker) => {
262-
return worker.getAllEntities(model.getValue());
276+
let code = model?.getValue() || '';
277+
if (typeof this._defaults.preprocessCode === 'function') {
278+
code = this._defaults.preprocessCode(code);
279+
}
280+
return worker.getAllEntities(model?.getValue());
263281
})
264282
.then((entities) => {
265283
const word = model.getWordAtPosition(position);
@@ -279,7 +297,7 @@ export class ReferenceAdapter<T extends BaseSQLWorker> implements languages.Refe
279297
});
280298
}
281299
});
282-
return arr.length ? arr : null;
300+
return arr;
283301
});
284302
}
285303
}

src/languages/flink/flink.contribution.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { registerLanguage } from '../../_.contribution';
7-
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
87
import { LanguageIdEnum } from '../../common/constants';
8+
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
99

1010
registerLanguage({
1111
id: LanguageIdEnum.FLINK,
@@ -16,5 +16,7 @@ registerLanguage({
1616

1717
setupLanguageFeatures(LanguageIdEnum.FLINK, {
1818
completionItems: true,
19-
diagnostics: true
19+
diagnostics: true,
20+
references: true,
21+
definitions: true,
2022
});

src/languages/hive/hive.contribution.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { registerLanguage } from '../../_.contribution';
7-
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
87
import { LanguageIdEnum } from '../../common/constants';
8+
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
99

1010
registerLanguage({
1111
id: LanguageIdEnum.HIVE,
@@ -16,5 +16,7 @@ registerLanguage({
1616

1717
setupLanguageFeatures(LanguageIdEnum.HIVE, {
1818
completionItems: true,
19-
diagnostics: true
19+
diagnostics: true,
20+
references: true,
21+
definitions: true,
2022
});

src/languages/impala/impala.contribution.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { registerLanguage } from '../../_.contribution';
7-
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
87
import { LanguageIdEnum } from '../../common/constants';
8+
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
99

1010
registerLanguage({
1111
id: LanguageIdEnum.IMPALA,
@@ -16,5 +16,7 @@ registerLanguage({
1616

1717
setupLanguageFeatures(LanguageIdEnum.IMPALA, {
1818
completionItems: true,
19-
diagnostics: true
19+
diagnostics: true,
20+
references: true,
21+
definitions: true,
2022
});

src/languages/mysql/mysql.contribution.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { registerLanguage } from '../../_.contribution';
7-
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
87
import { LanguageIdEnum } from '../../common/constants';
8+
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
99

1010
registerLanguage({
1111
id: LanguageIdEnum.MYSQL,
@@ -16,5 +16,7 @@ registerLanguage({
1616

1717
setupLanguageFeatures(LanguageIdEnum.MYSQL, {
1818
completionItems: true,
19-
diagnostics: true
19+
diagnostics: true,
20+
references: true,
21+
definitions: true,
2022
});

src/languages/pgsql/pgsql.contribution.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { registerLanguage } from '../../_.contribution';
7-
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
87
import { LanguageIdEnum } from '../../common/constants';
8+
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
99

1010
registerLanguage({
1111
id: LanguageIdEnum.PG,
@@ -16,5 +16,7 @@ registerLanguage({
1616

1717
setupLanguageFeatures(LanguageIdEnum.PG, {
1818
completionItems: true,
19-
diagnostics: true
19+
diagnostics: true,
20+
references: true,
21+
definitions: true,
2022
});

src/languages/spark/spark.contribution.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { registerLanguage } from '../../_.contribution';
7-
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
87
import { LanguageIdEnum } from '../../common/constants';
8+
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
99

1010
registerLanguage({
1111
id: LanguageIdEnum.SPARK,
@@ -16,5 +16,7 @@ registerLanguage({
1616

1717
setupLanguageFeatures(LanguageIdEnum.SPARK, {
1818
completionItems: true,
19-
diagnostics: true
19+
diagnostics: true,
20+
references: true,
21+
definitions: true,
2022
});

src/languages/trino/trino.contribution.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { registerLanguage } from '../../_.contribution';
2-
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
32
import { LanguageIdEnum } from '../../common/constants';
3+
import { setupLanguageFeatures } from '../../setupLanguageFeatures';
44

55
registerLanguage({
66
id: LanguageIdEnum.TRINO,
@@ -11,5 +11,7 @@ registerLanguage({
1111

1212
setupLanguageFeatures(LanguageIdEnum.TRINO, {
1313
completionItems: true,
14-
diagnostics: true
14+
diagnostics: true,
15+
references: true,
16+
definitions: true,
1517
});

src/monaco.contribution.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
1-
import { languages, Emitter, IEvent, editor, Position, IRange } from './fillers/monaco-editor-core';
2-
import { EntityContext, Suggestions } from 'dt-sql-parser';
1+
import {
2+
EntityContext,
3+
Suggestions,
4+
} from 'dt-sql-parser';
5+
6+
import {
7+
editor,
8+
Emitter,
9+
IEvent,
10+
IRange,
11+
languages,
12+
Position,
13+
} from './fillers/monaco-editor-core';
314

415
/**
516
* A completion item.
@@ -65,7 +76,7 @@ export interface ModeConfiguration {
6576
/**
6677
* Defines whether the built-in definitions provider is enabled.
6778
*/
68-
// readonly definitions?: boolean;
79+
readonly definitions?: boolean;
6980

7081
/**
7182
* Defines whether the built-in rename provider is enabled.
@@ -75,7 +86,7 @@ export interface ModeConfiguration {
7586
/**
7687
* Defines whether the built-in references provider is enabled.
7788
*/
78-
// readonly references?: boolean;
89+
readonly references?: boolean;
7990
}
8091

8192
/**
@@ -171,5 +182,7 @@ export const modeConfigurationDefault: Required<ModeConfiguration> = {
171182
completionService: defaultCompletionService,
172183
triggerCharacters: ['.', ' ']
173184
},
174-
diagnostics: true
185+
diagnostics: true,
186+
definitions: true,
187+
references: true
175188
};

src/setupLanguageFeatures.ts

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1+
import { LanguageIdEnum } from './common/constants';
12
import {
2-
PreprocessCode,
3+
IDisposable,
4+
languages,
5+
} from './fillers/monaco-editor-core';
6+
import {
7+
CompletionOptions,
38
LanguageServiceDefaults,
49
LanguageServiceDefaultsImpl,
5-
modeConfigurationDefault,
610
ModeConfiguration,
7-
CompletionOptions
11+
modeConfigurationDefault,
12+
PreprocessCode,
813
} from './monaco.contribution';
9-
import { languages, IDisposable } from './fillers/monaco-editor-core';
10-
import { LanguageIdEnum } from './common/constants';
1114

1215
export interface FeatureConfiguration {
1316
/**
@@ -20,6 +23,14 @@ export interface FeatureConfiguration {
2023
* Defaults to true.
2124
*/
2225
diagnostics?: boolean;
26+
/**
27+
* Defines whether the built-in definitions provider is enabled.
28+
*/
29+
definitions?: boolean;
30+
/**
31+
* Defines whether the built-in references provider is enabled.
32+
*/
33+
references?: boolean;
2334
/**
2435
* Define a function to preprocess code.
2536
* By default, do not something.
@@ -110,13 +121,23 @@ function processConfiguration(
110121
? configuration.completionItems!.triggerCharacters
111122
: (defaults?.modeConfiguration.completionItems.triggerCharacters ??
112123
modeConfigurationDefault.completionItems.triggerCharacters);
124+
const references =
125+
typeof configuration.references === 'boolean'
126+
? configuration.references
127+
: (defaults?.modeConfiguration.references ?? modeConfigurationDefault.references);
128+
const definitions =
129+
typeof configuration.definitions === 'boolean'
130+
? configuration.definitions
131+
: (defaults?.modeConfiguration.definitions ?? modeConfigurationDefault.definitions);
113132

114133
return {
115134
diagnostics,
116135
completionItems: {
117136
enable: completionEnable,
118137
completionService,
119138
triggerCharacters
120-
}
139+
},
140+
references,
141+
definitions,
121142
};
122143
}

0 commit comments

Comments
 (0)