@@ -8,12 +8,6 @@ import _package from '../package';
88import worker from '../worker/workerInstance' ;
99import { getCompletionArgs } from '../../autoComplete' ;
1010
11- const plsqlDataTypes = [
12- 'PLS_INTEGER' , 'BINARY_INTEGER' , 'BINARY_FLOAT' , 'BINARY_DOUBLE' , 'NUMBER' , 'DEC' , 'DECIMAL' , 'NUMERIC' , 'DOUBLE PRECISION' , 'FLOAT' , 'INT' , 'INTEGER' , 'SMALLINT' , 'REAL' ,
13- 'CHAR' , 'VARCHAR2' , 'RAW' , 'NCHAR' , 'NVARCHAR2' , 'LONG' , 'LONG RAW' , 'ROWID' , 'UROWID' ,
14- 'YEAR' , 'MONTH' , 'DAY' , 'HOUR' , 'MINUTE' , 'SECOND' , 'TIMEZONE_HOUR' , 'TIMEZONE_MINUTE' , 'TIMEZONE_REGION' , 'TIMEZONE_ABBR' ,
15- 'BFILE' , 'BLOB' , 'CLOB' , 'NCLOB'
16- ]
1711
1812class MonacoAutoComplete implements monaco . languages . CompletionItemProvider {
1913 triggerCharacters ?: string [ ] | undefined = [ '.' ] ;
@@ -35,7 +29,7 @@ class MonacoAutoComplete implements monaco.languages.CompletionItemProvider {
3529 return this . getCompleteWordFromOffset ( offset , value , delimiter , range , model , triggerCharacter )
3630 }
3731
38- async getColumnList ( model , item , range ) {
32+ async getColumnList ( model , item , range , autoNext : boolean = true ) {
3933 let modelOptions = this . getModelOptions ( model . id ) ;
4034 const suggestions : monaco . languages . CompletionItem [ ] = [ ] ;
4135 let columns = await modelOptions ?. getTableColumns ?.( item . tableName , item . schemaName ) ;
@@ -44,7 +38,7 @@ class MonacoAutoComplete implements monaco.languages.CompletionItemProvider {
4438 }
4539 if ( columns ) {
4640 columns . forEach ( column => {
47- suggestions . push ( tableColumnItem ( column . columnName , item . tableName , item . schemaName , range ) )
41+ suggestions . push ( tableColumnItem ( column . columnName , item . tableName , item . schemaName , range , autoNext ) )
4842 } )
4943 }
5044 return suggestions ;
@@ -105,14 +99,14 @@ class MonacoAutoComplete implements monaco.languages.CompletionItemProvider {
10599 suggestions . push ( keywordItem ( item , range ) )
106100 } else if ( item . type === 'allTables' ) {
107101 suggestions = suggestions . concat ( await this . getTableList ( model , item . schema , range ) ) ;
108- if ( ! item . schema ) {
102+ if ( ! item . schema && ! item . disableSys ) {
109103 /**
110104 * add oracle sys public views
111105 */
112106 suggestions = suggestions . concat ( await this . getTableList ( model , 'sys' , range ) ) ;
113107 }
114108 } else if ( item . type === 'tableColumns' ) {
115- suggestions = suggestions . concat ( await this . getColumnList ( model , item , range ) ) ;
109+ suggestions = suggestions . concat ( await this . getColumnList ( model , item , range , item . autoNext !== false ) ) ;
116110 } else if ( item . type === 'withTable' ) {
117111 suggestions . push ( tableItem ( item . tableName , 'CTE' , false , range ) )
118112 } else if ( item . type === 'allSchemas' ) {
@@ -152,181 +146,6 @@ class MonacoAutoComplete implements monaco.languages.CompletionItemProvider {
152146 suggestions : [ ] ,
153147 incomplete : false
154148 }
155- // console.time('getToken')
156- // const tokens = await parser.getOffsetLeftTokens(input, delimiter, offset);
157- // console.timeEnd('getToken')
158- // const autoComplte = new AutoComplete(getContext(), input, offset, tokens)
159- // const matchContext = autoComplte.match();
160- // if (!matchContext) {
161- // return {
162- // suggestions: [],
163- // incomplete: false
164- // }
165- // }
166- // let suggestions: monaco.languages.CompletionItem[] = [];
167- // let modelOptions = this.getModelOptions(model.id);
168- // for (let word of matchContext.completeWords) {
169- // switch (word) {
170- // case completeToken.COMPLETE_TOKEN_TABLES: {
171- // let tables = await modelOptions?.getTableList?.();
172- // if (tables) {
173- // suggestions = suggestions.concat(
174- // tables.map(table => ({
175- // label: table,
176- // kind: monaco.languages.CompletionItemKind.Struct,
177- // detail: 'TABLE',
178- // insertText: table,
179- // range
180- // }))
181- // )
182- // }
183- // break;
184- // }
185- // case completeToken.COMPLETE_TOKEN_VIEWS: {
186- // let views = await modelOptions?.getViewList?.();
187- // if (views) {
188- // suggestions = suggestions.concat(
189- // views.map(view => ({
190- // label: view,
191- // kind: monaco.languages.CompletionItemKind.Variable,
192- // detail: 'VIEW',
193- // insertText: view,
194- // range
195- // }))
196- // )
197- // }
198- // break;
199- // }
200- // case completeToken.COMPLETE_TOKEN_FUNCTIONS: {
201- // if (functions) {
202- // suggestions = suggestions.concat(
203- // functions.map(func => {
204- // const params = func.params?.map((param, index) => `${'$'}{${index + 1}:${typeof param === 'string' ? param : param.name}}`).join(', ') || ''
205- // const paramsDocument = func.params?.map((param, index) => `${typeof param === 'string' ? param : param.name}`).join(', ') || ''
206- // return {
207- // label: func.name,
208- // kind: monaco.languages.CompletionItemKind.Function,
209- // detail: func.desc,
210- // documentation: `${func.name}(${paramsDocument})`,
211- // insertText: `${func.name}(${params})`,
212- // insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
213- // range
214- // }
215- // })
216- // )
217- // }
218- // break;
219- // }
220- // case completeToken.COMPLETE_TOKEN_PROCEDURES: {
221- // let procedures = await modelOptions?.getProcedure?.();
222- // if (procedures) {
223- // suggestions = suggestions.concat(
224- // procedures.map(pro => ({
225- // label: pro,
226- // kind: monaco.languages.CompletionItemKind.Variable,
227- // detail: 'PROCEDURE',
228- // insertText: pro,
229- // range
230- // }))
231- // )
232- // }
233- // break;
234- // }
235- // case completeToken.COMPLETE_TOKEN_PKG: {
236- // let userPkgs = await modelOptions?.getPkgs?.() || [];
237- // const systemPkgs = _package;
238- // let pkgs = systemPkgs.concat(userPkgs);
239- // if (pkgs) {
240- // suggestions = suggestions.concat(
241- // pkgs.map(pkg => ({
242- // label: pkg,
243- // kind: monaco.languages.CompletionItemKind.Variable,
244- // detail: 'PACKAGE',
245- // insertText: pkg,
246- // range
247- // }))
248- // )
249- // }
250- // break;
251- // }
252- // case completeToken.COMPLETE_TOKEN_DATATYPES: {
253- // let types = await modelOptions?.getDataTypes?.();
254- // if (types) {
255- // suggestions = suggestions.concat(
256- // types.map(type => ({
257- // label: type,
258- // kind: monaco.languages.CompletionItemKind.Enum,
259- // insertText: type,
260- // range
261- // }))
262- // )
263- // }
264- // break;
265- // }
266- // case completeToken.COMPLETE_TOKEN_FROM_TABLES: {
267- // /**
268- // * 需要依靠解析
269- // */
270- // const parser = worker.parser;
271- // const { tables } = await parser.getAllFromTable(input, delimiter, offset);
272- // const names = new Set<string>(tables?.map(t => {
273- // if (t.alias) {
274- // return t.alias;
275- // }
276- // return [t.schema, t.name].filter(Boolean).join('.')
277- // }));
278- // if (names?.size) {
279- // suggestions = suggestions.concat(
280- // Array.from(names).map(name => ({
281- // label: name,
282- // kind: monaco.languages.CompletionItemKind.Field,
283- // insertText: name,
284- // range
285- // }))
286- // )
287- // }
288- // break;
289- // }
290- // case completeToken.COMPLETE_TOKEN_PLDATATYPES: {
291- // suggestions = suggestions.concat(
292- // plsqlDataTypes.map(type => ({
293- // label: type,
294- // kind: monaco.languages.CompletionItemKind.Enum,
295- // insertText: type,
296- // range
297- // }))
298- // )
299- // break;
300- // }
301- // case completeToken.COMPLETE_TOKEN_TABLE_COLUMNS: {
302- // const columns = await modelOptions?.getTableColumns?.('table1');
303- // if (columns) {
304- // suggestions = suggestions.concat(
305- // columns.map(column => ({
306- // label: column.columnName,
307- // kind: monaco.languages.CompletionItemKind.Field,
308- // detail: column.columnType,
309- // insertText: column.columnName,
310- // range
311- // }))
312- // )
313- // }
314- // break;
315- // }
316- // default: {
317- // suggestions.push({
318- // label: word,
319- // kind: monaco.languages.CompletionItemKind.Keyword,
320- // insertText: word + ' ',
321- // range
322- // })
323- // }
324- // }
325- // }
326- // return {
327- // suggestions,
328- // incomplete: true
329- // }
330149 }
331150}
332151
0 commit comments