Skip to content

Commit d13713f

Browse files
committed
feat: Optimize code intellisense
1 parent a1e7076 commit d13713f

6 files changed

Lines changed: 48 additions & 89 deletions

File tree

chat2db-client/src/components/Console/MonacoEditor/index.tsx

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -36,86 +36,6 @@ export interface IExportRefFunction {
3636
setValue: (text: any, range?: IRangeType) => void;
3737
}
3838

39-
export interface IHintData {
40-
[keys: string]: string[];
41-
}
42-
// monaco.languages.registerCompletionItemProvider(`sql`, {
43-
// triggerCharacters: [' ', '('],
44-
// provideCompletionItems: (model: monaco.editor.ITextModel, position: monaco.Position) => {
45-
// const { lineNumber, column } = position;
46-
// const textBeforePointer = model.getValueInRange({
47-
// startLineNumber: lineNumber,
48-
// startColumn: 0,
49-
// endLineNumber: lineNumber,
50-
// endColumn: column,
51-
// });
52-
// const tokens = textBeforePointer.trim().split(/\s+/);
53-
// const lastToken = tokens[tokens.length - 1]; // 获取最后一段非空字符串
54-
// const lastTokenBefore = tokens[tokens.length - 2]; // 获取最后一段非空字符串
55-
56-
// // 后面显示表名
57-
// if (
58-
// ['FROM', 'JOIN', 'UPDATE', 'DELETE'].includes(lastToken.toUpperCase()) ||
59-
// ['INSERT INTO', 'ALTER TABLE', 'DROP TABLE'].includes((lastTokenBefore + ' ' + lastToken).toUpperCase())
60-
// ) {
61-
// return {
62-
// // suggestions: [
63-
// // {
64-
// // label: 'table1(datasource1)',
65-
// // kind: monaco.languages.CompletionItemKind.Method,
66-
// // insertText: 'table1',
67-
// // detail: '<Table>',
68-
// // },
69-
// // ],
70-
// suggestions: getTableSuggest(tableList),
71-
// };
72-
// }
73-
74-
// // // 后面显示字段名
75-
// // if (['SELECT'].includes(lastToken.toUpperCase())) {
76-
// // return {
77-
// // suggestions: [
78-
// // {
79-
// // label: 'field1(table1)',
80-
// // kind: monaco.languages.CompletionItemKind.Field,
81-
// // insertText: 'field1',
82-
// // detail: '<Field>',
83-
// // },
84-
// // {
85-
// // label: '*',
86-
// // kind: monaco.languages.CompletionItemKind.Field,
87-
// // insertText: '*',
88-
// // detail: '<Field>',
89-
// // },
90-
// // ],
91-
// // };
92-
// // }
93-
94-
// return {
95-
// suggestions: [
96-
// ...getSQLKeywords(),
97-
// ...getSQLFunctions(),
98-
// ...getTableSuggest([
99-
// {
100-
// tableName: 'table1',
101-
// datasourceName: 'datasource1',
102-
// },
103-
// ]),
104-
// ...getFieldSuggest([
105-
// {
106-
// tableName: 'table1',
107-
// fields: [
108-
// {
109-
// name: 'field1',
110-
// },
111-
// ],
112-
// },
113-
// ]),
114-
// ],
115-
// };
116-
// },
117-
// });
118-
11939
function MonacoEditor(props: IProps, ref: ForwardedRef<IExportRefFunction>) {
12040
const {
12141
id,

chat2db-client/src/constants/IntelliSense/mysql.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { DatabaseTypeCode } from '../common';
33
export default {
44
type: DatabaseTypeCode.MYSQL,
55
keywords: [
6-
'*',
76
'ACCESSIBLE',
87
'ADD',
98
'ALL',
@@ -584,7 +583,6 @@ export default {
584583
'ROW_NUMBER',
585584
'RPAD',
586585
'RTRIM',
587-
'SCHEMA',
588586
'SEC_TO_TIME',
589587
'SECOND',
590588
'SESSION_USER',

chat2db-client/src/constants/IntelliSense/pgsql.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { DatabaseTypeCode } from '../common';
33
export default {
44
type: DatabaseTypeCode.POSTGRESQL,
55
keywords: [
6-
'*',
76
'ALL',
87
'ANALYSE',
98
'ANALYZE',

chat2db-client/src/pages/main/workspace/components/WorkspaceRight/index.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,9 +316,8 @@ const WorkspaceRight = memo<IProps>((props: IProps) => {
316316
schemaName,
317317
})
318318
.then((data) => {
319-
console.log('databaseName', data);
320319
tableList.current = (data || []).map((item: any) => item.name);
321-
registerIntelliSenseTable(data, databaseName, databaseType);
320+
registerIntelliSenseTable(data, databaseType, dataSourceId, databaseName, schemaName);
322321
registerIntelliSenseField(tableList.current, dataSourceId, databaseName, schemaName);
323322
});
324323
}

chat2db-client/src/utils/IntelliSense/field.ts

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,33 @@ let intelliSenseField = monaco.languages.registerCompletionItemProvider('sql', {
1212
},
1313
});
1414

15+
const addIntelliSenseField = async (props: {
16+
tableName: string;
17+
dataSourceId: number;
18+
databaseName: string;
19+
schemaName?: string;
20+
}) => {
21+
const { tableName, dataSourceId, databaseName, schemaName } = props;
22+
23+
if (!fieldList[tableName]) {
24+
const data = await sqlService.getAllFieldByTable({
25+
dataSourceId,
26+
databaseName,
27+
schemaName,
28+
tableName,
29+
});
30+
fieldList[tableName] = data;
31+
}
32+
};
33+
1534
const registerIntelliSenseField = (tableList: string[], dataSourceId, databaseName, schemaName) => {
1635
intelliSenseField.dispose();
1736
fieldList = {};
1837
intelliSenseField = monaco.languages.registerCompletionItemProvider('sql', {
19-
triggerCharacters: [' ', '.', '`', "'", '"'],
38+
triggerCharacters: [' ', '.', '('],
2039
provideCompletionItems: async (model, position) => {
40+
console.log('registerIntelliSenseField');
41+
2142
// 获取到当前行文本
2243
const textUntilPosition = model.getValueInRange({
2344
startLineNumber: position.lineNumber,
@@ -33,7 +54,6 @@ const registerIntelliSenseField = (tableList: string[], dataSourceId, databaseNa
3354
console.log(word); // 输出: text
3455
}
3556

36-
console.log('registerIntelliSenseField start', textUntilPosition, word);
3757
if (!word) {
3858
return; // 如果没有匹配到,直接返回
3959
}
@@ -70,4 +90,4 @@ const registerIntelliSenseField = (tableList: string[], dataSourceId, databaseNa
7090
});
7191
};
7292

73-
export { intelliSenseField, registerIntelliSenseField };
93+
export { intelliSenseField, registerIntelliSenseField, addIntelliSenseField };

chat2db-client/src/utils/IntelliSense/table.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { DatabaseTypeCode } from '@/constants';
22
import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';
3+
import { addIntelliSenseField } from './field';
34

45
/** 当前库下的表 */
56
let intelliSenseTable = monaco.languages.registerCompletionItemProvider('sql', {
@@ -12,9 +13,19 @@ let intelliSenseTable = monaco.languages.registerCompletionItemProvider('sql', {
1213

1314
const registerIntelliSenseTable = (
1415
tableList: Array<{ name: string; comment: string }>,
15-
databaseName?: string,
1616
databaseCode?: DatabaseTypeCode,
17+
dataSourceId?: number,
18+
databaseName?: string,
19+
schemaName?: string,
1720
) => {
21+
monaco.editor.registerCommand('myCustomCommand', (_: any, ...args: any[]) => {
22+
// access the arguments here
23+
console.log('trigger suggest', args[0]);
24+
// addIntelliSenseField(tableName)
25+
addIntelliSenseField(args[0]);
26+
return;
27+
});
28+
1829
intelliSenseTable.dispose();
1930
intelliSenseTable = monaco.languages.registerCompletionItemProvider('sql', {
2031
triggerCharacters: [' '],
@@ -38,6 +49,18 @@ const registerIntelliSenseTable = (
3849
insertText: handleInsertText(tableName.name),
3950
// range: monaco.Range.fromPositions(position),
4051
documentation: tableName.comment,
52+
command: {
53+
id: 'myCustomCommand',
54+
title: 'operator_additional_suggestions',
55+
arguments: [
56+
{
57+
tableName: tableName.name,
58+
dataSourceId,
59+
databaseName,
60+
schemaName,
61+
},
62+
],
63+
},
4164
};
4265
}),
4366
};

0 commit comments

Comments
 (0)