diff --git a/package-lock.json b/package-lock.json index 36742a30be..c505d103e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "@gravity-ui/react-data-table": "^2.1.1", "@gravity-ui/table": "^1.7.0", "@gravity-ui/uikit": "^6.33.0", - "@gravity-ui/websql-autocomplete": "^12.1.2", + "@gravity-ui/websql-autocomplete": "^12.7.0", "@hookform/resolvers": "^3.9.0", "@reduxjs/toolkit": "^2.2.3", "@tanstack/react-table": "^8.19.3", @@ -4083,12 +4083,13 @@ } }, "node_modules/@gravity-ui/websql-autocomplete": { - "version": "12.1.2", - "resolved": "https://registry.npmjs.org/@gravity-ui/websql-autocomplete/-/websql-autocomplete-12.1.2.tgz", - "integrity": "sha512-f/G7CF3vUc/r/fvYvohImBeR9xcgcEWRRHU8wR6eUIFSOTRvo+XZuf9WcpaoK0WZRBRy8M4kpbe8wueg/KrvOQ==", + "version": "12.7.0", + "resolved": "https://registry.npmjs.org/@gravity-ui/websql-autocomplete/-/websql-autocomplete-12.7.0.tgz", + "integrity": "sha512-GirtFkhutu1RBZdLyjgfr9EVtZKu8Uaz6WE3jl6MBgZx/fZtvHmuzOPNeKijgzfzJT1m6fjgeoja+W6jaIcgJQ==", "dependencies": { "antlr4-c3": "^3.4.1", - "antlr4ng": "^3.0.4" + "antlr4ng": "^3.0.4", + "json5": "^2.2.3" }, "engines": { "node": ">=16.0" @@ -7084,9 +7085,9 @@ } }, "node_modules/antlr4ng": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/antlr4ng/-/antlr4ng-3.0.7.tgz", - "integrity": "sha512-e9VzrS6fErCUTmkZX2eKEMCsmYY87gVhmHkzmOXtUDgvwGhivUvtiHqlOByDx4Nd1PIQ0lMlhflOWEz6cGXqKA==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/antlr4ng/-/antlr4ng-3.0.11.tgz", + "integrity": "sha512-/EmhCjyIL7bomXcgmWnMxadbSEd5Fhfdt4pc9LiViPYS5vy/MZl45RscSp27vDrEEFxhXTRTwnkIH+Dp7ZhmXw==", "peerDependencies": { "antlr4ng-cli": "^2.0.0" } @@ -16781,7 +16782,6 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "bin": { "json5": "lib/cli.js" }, diff --git a/package.json b/package.json index 7975266b9b..7ada5e03a9 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "@gravity-ui/react-data-table": "^2.1.1", "@gravity-ui/table": "^1.7.0", "@gravity-ui/uikit": "^6.33.0", - "@gravity-ui/websql-autocomplete": "^12.1.2", + "@gravity-ui/websql-autocomplete": "^12.7.0", "@hookform/resolvers": "^3.9.0", "@reduxjs/toolkit": "^2.2.3", "@tanstack/react-table": "^8.19.3", diff --git a/src/utils/monaco/yql/generateSuggestions.ts b/src/utils/monaco/yql/generateSuggestions.ts index 0f33a14224..c1188022ea 100644 --- a/src/utils/monaco/yql/generateSuggestions.ts +++ b/src/utils/monaco/yql/generateSuggestions.ts @@ -138,16 +138,17 @@ const SuggestionsWeight: Record = { suggestAllColumns: 3, suggestColumns: 4, suggestColumnAliases: 5, - suggestTableIndexes: 6, - suggestTableHints: 7, - suggestEntitySettings: 8, - suggestKeywords: 9, - suggestAggregateFunctions: 10, - suggestTableFunctions: 11, - suggestWindowFunctions: 12, - suggestFunctions: 13, - suggestSimpleTypes: 14, - suggestUdfs: 15, + suggestVariables: 6, + suggestTableIndexes: 7, + suggestTableHints: 8, + suggestEntitySettings: 9, + suggestKeywords: 10, + suggestAggregateFunctions: 11, + suggestTableFunctions: 12, + suggestWindowFunctions: 13, + suggestFunctions: 14, + suggestSimpleTypes: 15, + suggestUdfs: 16, }; function getSuggestionIndex(suggestionType: SuggestionType) { @@ -328,7 +329,7 @@ export function generateKeywordsSuggestion( if (!suggestKeywords) { return []; } - return suggestKeywords?.map((keywordSuggestion) => ({ + return suggestKeywords.map((keywordSuggestion) => ({ label: keywordSuggestion.value, insertText: keywordSuggestion.value, kind: CompletionItemKind.Keyword, @@ -338,6 +339,26 @@ export function generateKeywordsSuggestion( })); } +export function generateVariableSuggestion( + rangeToInsertSuggestion: monaco.IRange, + suggestVariables?: string[], +) { + if (!suggestVariables) { + return []; + } + return suggestVariables.map((rawVariable) => { + const variable = '$' + rawVariable; + return { + label: variable, + insertText: variable, + kind: CompletionItemKind.Variable, + detail: 'Variable', + range: rangeToInsertSuggestion, + sortText: suggestionIndexToWeight(getSuggestionIndex('suggestVariables')), + }; + }); +} + export async function generateEntitiesSuggestion( rangeToInsertSuggestion: monaco.IRange, suggestEntities: YQLEntity[], diff --git a/src/utils/monaco/yql/yqlSuggestions.ts b/src/utils/monaco/yql/yqlSuggestions.ts index 338faaac69..0091a86138 100644 --- a/src/utils/monaco/yql/yqlSuggestions.ts +++ b/src/utils/monaco/yql/yqlSuggestions.ts @@ -13,6 +13,7 @@ import { generateSimpleTypesSuggestion, generateTableFunctionsSuggestion, generateUdfSuggestion, + generateVariableSuggestion, generateWindowFunctionsSuggestion, } from './generateSuggestions'; @@ -71,6 +72,7 @@ async function getSuggestions( let simpleTypesSuggestions: Monaco.languages.CompletionItem[] = []; let pragmasSuggestions: Monaco.languages.CompletionItem[] = []; let entitySettingsSuggestions: Monaco.languages.CompletionItem[] = []; + let variableSuggestions: Monaco.languages.CompletionItem[] = []; if (parseResult.suggestEntity) { const entityNamePrefix = getEntityNameAtCursor(model, cursorPosition); @@ -99,6 +101,12 @@ async function getSuggestions( if (parseResult.suggestSimpleTypes) { simpleTypesSuggestions = await generateSimpleTypesSuggestion(rangeToInsertSuggestion); } + if (parseResult.suggestVariables) { + variableSuggestions = generateVariableSuggestion( + rangeToInsertSuggestion, + parseResult.suggestVariables, + ); + } if (parseResult.suggestUdfs) { udfsSuggestions = await generateUdfSuggestion(rangeToInsertSuggestion); } @@ -141,6 +149,7 @@ async function getSuggestions( ...keywordsSuggestions, ...aggregateFunctionsSuggestions, ...entitySettingsSuggestions, + ...variableSuggestions, ]; return suggestions;