Skip to content

Commit 3d5e2ca

Browse files
committed
cleanup 2
1 parent 5a08fa0 commit 3d5e2ca

5 files changed

Lines changed: 20 additions & 35 deletions

File tree

src/platform/packages/shared/kbn-esql-language/src/commands/definitions/utils/ast.test.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import { Parser, PromQLParser, Walker } from '@elastic/esql';
1111
import type { ESQLAstItem, ESQLAstQueryExpression } from '@elastic/esql/types';
1212
import { EDITOR_MARKER } from '../constants';
1313
import {
14-
addAutocompleteMarker,
1514
correctPromqlQuerySyntax,
1615
correctQuerySyntax,
1716
getBracketsToClose,
@@ -47,33 +46,31 @@ describe('getBracketsToClose', () => {
4746
});
4847
});
4948

50-
describe('addAutocompleteMarker', () => {
49+
describe('correctQuerySyntax', () => {
5150
it('appends marker after operator', () => {
5251
const query = 'FROM foo | EVAL field > ';
53-
const result = addAutocompleteMarker(query);
52+
const result = correctQuerySyntax(query);
5453
expect(result.endsWith(EDITOR_MARKER)).toBe(true);
5554
});
5655

5756
it('appends marker after comma', () => {
5857
const query = 'FROM foo | STATS field1, ';
59-
const result = addAutocompleteMarker(query);
58+
const result = correctQuerySyntax(query);
6059
expect(result.endsWith(EDITOR_MARKER)).toBe(true);
6160
});
6261

6362
it('appends marker if all brackets are closed and ends with operator', () => {
6463
const query = 'FROM index | STATS AVG(field1) != ';
65-
const result = addAutocompleteMarker(query);
64+
const result = correctQuerySyntax(query);
6665
expect(result.endsWith(EDITOR_MARKER)).toBe(true);
6766
});
6867

6968
it('does not append marker for inline cast type names ending with operator-like suffixes', () => {
7069
const query = 'FROM index | EVAL vec = [0.1, 0.2]::dense_vector ';
71-
const result = addAutocompleteMarker(query);
70+
const result = correctQuerySyntax(query);
7271
expect(result).toEqual(query);
7372
});
74-
});
7573

76-
describe('correctQuerySyntax', () => {
7774
it('closes unclosed brackets', () => {
7875
const query = 'FROM foo | EVAL foo(bar[baz';
7976
const result = correctQuerySyntax(query);
@@ -91,8 +88,7 @@ describe('correctQuerySyntax', () => {
9188
it('handles incomplete function signature', () => {
9289
const query = 'FROM foo | EVAL foo(bar, ';
9390
const result = correctQuerySyntax(query);
94-
expect(result.endsWith(')')).toBe(true);
95-
expect(result).not.toContain(EDITOR_MARKER);
91+
expect(result.endsWith(`${EDITOR_MARKER})`)).toBe(true);
9692
});
9793
});
9894

@@ -139,7 +135,7 @@ describe('correctPromqlQuerySyntax', () => {
139135

140136
describe('removeAutocompleteMarkers', () => {
141137
const parseAutocomplete = (innerText: string): ESQLAstQueryExpression => {
142-
const corrected = correctQuerySyntax(addAutocompleteMarker(innerText));
138+
const corrected = correctQuerySyntax(innerText);
143139
return Parser.parse(corrected, { withFormatting: true }).root;
144140
};
145141

src/platform/packages/shared/kbn-esql-language/src/commands/definitions/utils/ast.ts

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -225,29 +225,21 @@ export function getBracketsToClose(text: string) {
225225
return stack.reverse().map((bracket) => pairs[bracket]);
226226
}
227227

228-
export function addAutocompleteMarker(query: string) {
229-
if (
230-
ENDS_WITH_BINARY_OPERATOR_REGEX.test(query) ||
231-
ENDS_WITH_CASTING_OPERATOR_REGEX.test(query) ||
232-
(endsWithComma(query) && endsWithWhitespace(query))
233-
) {
234-
return `${query} ${EDITOR_MARKER}`;
235-
}
236-
237-
return query;
238-
}
239-
240228
/**
241229
* This function attempts to correct the syntax of a partial query to make it valid.
242230
*
243231
* We are generally dealing with incomplete queries when the user is typing. But,
244232
* having an AST is helpful so we heuristically correct the syntax so it can be parsed.
245-
*
246-
* @param _query
247-
* @param context
248-
* @returns
249233
*/
250234
export function correctQuerySyntax(query: string) {
235+
if (
236+
ENDS_WITH_BINARY_OPERATOR_REGEX.test(query) ||
237+
ENDS_WITH_CASTING_OPERATOR_REGEX.test(query) ||
238+
(endsWithComma(query) && endsWithWhitespace(query))
239+
) {
240+
query += ` ${EDITOR_MARKER}`;
241+
}
242+
251243
// check if all brackets are closed, otherwise close them
252244
return query + getBracketsToClose(query).join('');
253245
}
@@ -259,9 +251,7 @@ const PROMQL_TRAILING_COLON_REGEX = /:\s*$/;
259251
* It keeps the same marker semantics used in ES|QL correction, but only for trailing
260252
* separators relevant to PromQL argument/subquery contexts.
261253
*/
262-
export function correctPromqlQuerySyntax(input: string): string {
263-
let query = input;
264-
254+
export function correctPromqlQuerySyntax(query: string): string {
265255
if (
266256
!query.includes(EDITOR_MARKER) &&
267257
(endsWithComma(query) || PROMQL_TRAILING_COLON_REGEX.test(query))

src/platform/packages/shared/kbn-esql-language/src/language/shared/get_cursor_context.test.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
import { EDITOR_MARKER } from '../../commands/definitions/constants';
1111
import {
12-
addAutocompleteMarker,
1312
correctQuerySyntax,
1413
isMarkerNode,
1514
removeAutocompleteMarkers,
@@ -19,7 +18,7 @@ import { Parser, Walker } from '@elastic/esql';
1918
import { getCursorContext } from './get_cursor_context';
2019

2120
const assertMarkerRemoved = (_query: string) => {
22-
const query = correctQuerySyntax(addAutocompleteMarker(_query));
21+
const query = correctQuerySyntax(_query);
2322
if (!query.includes(EDITOR_MARKER)) {
2423
throw new Error(`Query does not contain marker: ${query}`);
2524
}

src/platform/packages/shared/kbn-esql-language/src/language/shared/get_query_for_fields.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
import type { ESQLAstQueryExpression, ESQLAstForkCommand } from '@elastic/esql/types';
1111
import { getBracketsToClose } from '../../commands/definitions/utils/ast';
12+
import { endsWithComma } from '../../commands/definitions/utils/regex';
1213
import { expandEvals } from './expand_evals';
1314

1415
/**
@@ -51,7 +52,7 @@ export function getQueryForFields(
5152

5253
if (lastCommand && lastCommand.name === 'eval') {
5354
const hasTrailingSeparatorComma =
54-
getBracketsToClose(queryString).length === 0 && queryString.trimEnd().endsWith(',');
55+
getBracketsToClose(queryString).length === 0 && endsWithComma(queryString);
5556

5657
if (lastCommand.args.length > 1 || hasTrailingSeparatorComma) {
5758
/**

src/platform/packages/shared/kbn-esql-language/src/language/shared/parse_for_autocomplete_query.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import { Parser, PromQLParser } from '@elastic/esql';
1111
import type { PromQLAstQueryExpression } from '@elastic/esql';
1212
import type { ESQLAstQueryExpression } from '@elastic/esql/types';
1313
import {
14-
addAutocompleteMarker,
1514
correctPromqlQuerySyntax,
1615
correctQuerySyntax,
1716
findAstPosition,
@@ -30,7 +29,7 @@ interface ParsedAutocompleteQuery {
3029
*/
3130
export function parseAutocompleteQuery(fullText: string, offset: number): ParsedAutocompleteQuery {
3231
const innerText = fullText.substring(0, offset);
33-
const correctedQuery = correctQuerySyntax(addAutocompleteMarker(innerText));
32+
const correctedQuery = correctQuerySyntax(innerText);
3433
const { root } = Parser.parse(correctedQuery, { withFormatting: true });
3534

3635
return {

0 commit comments

Comments
 (0)