Skip to content

Commit 832e5e9

Browse files
committed
feat: Optimize editor IntelliSense order
1 parent 55b2ed0 commit 832e5e9

3 files changed

Lines changed: 407 additions & 20 deletions

File tree

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,19 @@ const addIntelliSenseField = async (props: {
3131
}
3232
};
3333

34+
function checkFieldContext(text) {
35+
const normalizedText = text.trim().toUpperCase();
36+
const columnKeywords = ['SELECT', 'WHERE', 'AND', 'OR', 'GROUP BY', 'ORDER BY', 'SET'];
37+
38+
for (const keyword of columnKeywords) {
39+
if (normalizedText.endsWith(keyword)) {
40+
return true;
41+
}
42+
}
43+
44+
return false;
45+
}
46+
3447
const registerIntelliSenseField = (tableList: string[], dataSourceId, databaseName, schemaName) => {
3548
intelliSenseField.dispose();
3649
fieldList = {};
@@ -47,6 +60,8 @@ const registerIntelliSenseField = (tableList: string[], dataSourceId, databaseNa
4760
endColumn: position.column,
4861
});
4962

63+
const isFieldContext = checkFieldContext(textUntilPosition);
64+
5065
const match = textUntilPosition.match(/(\b\w+\b)[^\w]*$/);
5166
let word;
5267
if (match) {
@@ -77,11 +92,11 @@ const registerIntelliSenseField = (tableList: string[], dataSourceId, databaseNa
7792
},
7893
kind: monaco.languages.CompletionItemKind.Field,
7994
insertText: fieldObj.name,
95+
sortText: (isFieldContext ? '01' : '02') + fieldObj.name,
8096
}));
8197

8298
return [...acc, ...arr];
8399
}, []);
84-
console.log('field suggestions', suggestions);
85100

86101
return {
87102
suggestions,

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

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,36 @@ let intelliSenseTable = monaco.languages.registerCompletionItemProvider('sql', {
1111
},
1212
});
1313

14+
/** 根据不同的数据库,插入不同的表名 */
15+
const handleInsertText = (text, databaseCode: DatabaseTypeCode = DatabaseTypeCode.MYSQL) => {
16+
if (databaseCode === DatabaseTypeCode.POSTGRESQL) {
17+
return `${text}`;
18+
} else {
19+
return `${text}`;
20+
}
21+
};
22+
23+
function checkTableContext(text) {
24+
const normalizedText = text.trim().toUpperCase();
25+
const tableKeywords = ['FROM', 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'RIGHT JOIN', 'UPDATE'];
26+
27+
for (const keyword of tableKeywords) {
28+
if (normalizedText.endsWith(keyword)) {
29+
return true;
30+
}
31+
}
32+
33+
return false;
34+
}
35+
1436
const registerIntelliSenseTable = (
1537
tableList: Array<{ name: string; comment: string }>,
1638
databaseCode?: DatabaseTypeCode,
1739
dataSourceId?: number,
1840
databaseName?: string,
1941
schemaName?: string,
2042
) => {
21-
monaco.editor.registerCommand('myCustomCommand', (_: any, ...args: any[]) => {
22-
// access the arguments here
23-
console.log('trigger suggest', args[0]);
24-
// addIntelliSenseField(tableName)
43+
monaco.editor.registerCommand('addFieldList', (_: any, ...args: any[]) => {
2544
addIntelliSenseField(args[0]);
2645
return;
2746
});
@@ -30,13 +49,15 @@ const registerIntelliSenseTable = (
3049
intelliSenseTable = monaco.languages.registerCompletionItemProvider('sql', {
3150
triggerCharacters: [' '],
3251
provideCompletionItems: (model, position) => {
33-
const handleInsertText = (text) => {
34-
if (databaseCode === DatabaseTypeCode.POSTGRESQL) {
35-
return `${text}`;
36-
} else {
37-
return `${text}`;
38-
}
39-
};
52+
const lineContentUntilPosition = model.getValueInRange({
53+
startLineNumber: position.lineNumber,
54+
startColumn: 1,
55+
endLineNumber: position.lineNumber,
56+
endColumn: position.column,
57+
});
58+
59+
const isTableContext = checkTableContext(lineContentUntilPosition);
60+
4061
return {
4162
suggestions: (tableList || []).map((tableName) => {
4263
return {
@@ -46,12 +67,13 @@ const registerIntelliSenseTable = (
4667
description: '表名',
4768
},
4869
kind: monaco.languages.CompletionItemKind.Variable,
49-
insertText: handleInsertText(tableName.name),
70+
insertText: handleInsertText(tableName.name, databaseCode),
5071
// range: monaco.Range.fromPositions(position),
5172
documentation: tableName.comment,
73+
sortText: (isTableContext ? '01' : '02') + tableName.name,
5274
command: {
53-
id: 'myCustomCommand',
54-
title: 'operator_additional_suggestions',
75+
id: 'addFieldList',
76+
title: 'addFieldList',
5577
arguments: [
5678
{
5779
tableName: tableName.name,

0 commit comments

Comments
 (0)