Skip to content

Commit 59a541e

Browse files
author
zhaoge
committed
feat(merge conflict): merge
1 parent 3275599 commit 59a541e

11 files changed

+210
-37
lines changed

src/languageFeatures.ts

+111-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1+
import type { ParseError } from 'dt-sql-parser';
12
import {
3+
EntityContext,
4+
} from 'dt-sql-parser/dist/parser/common/entityCollector';
5+
import { WordPosition } from 'dt-sql-parser/dist/parser/common/textAndWord';
6+
import * as monaco from 'monaco-editor';
7+
8+
import { BaseSQLWorker } from './baseSQLWorker';
9+
import { debounce } from './common/utils';
10+
import {
11+
CancellationToken,
212
editor,
3-
Uri,
413
IDisposable,
5-
MarkerSeverity,
6-
Range,
714
languages,
15+
MarkerSeverity,
816
Position,
9-
CancellationToken
17+
Range,
18+
Uri,
1019
} from './fillers/monaco-editor-core';
11-
import { debounce } from './common/utils';
12-
import { BaseSQLWorker } from './baseSQLWorker';
13-
import type { ParseError } from 'dt-sql-parser';
1420
import type { LanguageServiceDefaults } from './monaco.contribution';
1521

1622
export interface WorkerAccessor<T extends BaseSQLWorker> {
@@ -197,3 +203,101 @@ export class CompletionAdapter<T extends BaseSQLWorker>
197203
});
198204
}
199205
}
206+
207+
export class DefinitionAdapter<T extends BaseSQLWorker> implements languages.DefinitionProvider {
208+
constructor(
209+
private readonly _worker: WorkerAccessor<T>,
210+
private readonly _defaults: LanguageServiceDefaults) {}
211+
provideDefinition(
212+
model: editor.IReadOnlyModel,
213+
position: Position,
214+
_token: CancellationToken
215+
): languages.ProviderResult<languages.Definition | languages.LocationLink[]> {
216+
const resource = model.uri;
217+
const lineContent = model.getLineContent(position.lineNumber);
218+
if (lineContent.startsWith('--')) return null;
219+
return this._worker(resource)
220+
.then((worker) => {
221+
let code = model?.getValue() || '';
222+
if (typeof this._defaults.preprocessCode === 'function') {
223+
code = this._defaults.preprocessCode(code);
224+
}
225+
return worker.getAllEntities(code);
226+
})
227+
.then((entities) => {
228+
const word = model.getWordAtPosition(position);
229+
let pos: WordPosition = {
230+
line: -1,
231+
startIndex: -1,
232+
endIndex: -1,
233+
startColumn: -1,
234+
endColumn: -1
235+
};
236+
entities?.forEach((entity: EntityContext) => {
237+
if (
238+
entity.entityContextType.includes('Create') &&
239+
word?.word &&
240+
entity.text === word?.word
241+
) {
242+
pos = entity.position;
243+
}
244+
});
245+
if (pos && pos.line !== -1) {
246+
return {
247+
uri: model.uri,
248+
range: new monaco.Range(
249+
pos?.line,
250+
pos?.startColumn,
251+
pos?.line,
252+
pos?.endColumn
253+
)
254+
};
255+
}
256+
});
257+
}
258+
}
259+
260+
export class ReferenceAdapter<T extends BaseSQLWorker> implements languages.ReferenceProvider {
261+
constructor(
262+
private readonly _worker: WorkerAccessor<T>,
263+
private readonly _defaults: LanguageServiceDefaults
264+
) {}
265+
provideReferences(
266+
model: editor.IReadOnlyModel,
267+
position: Position,
268+
_context: languages.ReferenceContext,
269+
_token: CancellationToken
270+
): languages.ProviderResult<languages.Location[]> {
271+
const resource = model.uri;
272+
const lineContent = model.getLineContent(position.lineNumber);
273+
if (!lineContent.startsWith('CREATE')) return;
274+
return this._worker(resource)
275+
.then((worker) => {
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());
281+
})
282+
.then((entities) => {
283+
const word = model.getWordAtPosition(position);
284+
const arr: languages.Location[] = [];
285+
entities?.forEach((entity) => {
286+
if (word?.word && entity.text === word?.word) {
287+
let pos: WordPosition | null = null;
288+
pos = entity.position;
289+
arr.push({
290+
uri: model.uri,
291+
range: new monaco.Range(
292+
pos?.line,
293+
pos?.startColumn,
294+
pos?.line,
295+
pos?.endColumn
296+
)
297+
});
298+
}
299+
});
300+
return arr;
301+
});
302+
}
303+
}

src/languages/flink/flink.contribution.ts

+4-2
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

+4-2
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

+4-2
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

+4-2
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

+4-2
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

+4-2
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

+4-2
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

+18-5
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

+27-6
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)