Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ES|QL] fix query highlight when wrapped in multi-line #172080

Merged
merged 6 commits into from
Nov 29, 2023

Conversation

dej611
Copy link
Contributor

@dej611 dej611 commented Nov 28, 2023

Summary

This PR edits a bit the grammar to make the highlight work again.

This PR fixes the highlight issue with the pipe wrapping in the editor.
The initial fix at grammar level didn't work, breaking some validation tests.

The new approach operates at the editor level, keeping track of the line number between each tokenize session and cleaning up the line from the initial | for lines after the first one.
Note that with this approach the initial | remains "unstyled" for the language (it still inherit some styling from the editor) but that seems to still work with both themes.

esql_highlight_dark
esql_highlight_light

Note: It can become a problem if we decide to color the | with a specific color in the future.

TL;DR.

The edit is required due to how Monaco works in this case.

Long explanation

In the grammar the UNKNOWN_CMD is a catch all place for all those strings who match a new line in a query/statement. Due to ES always receiving the query as single line they want to validate invalid strings with a catch all trick like that.
ES|QL is defined to work as single line query language.

On the other hand Kibana uses Monaco which calls a TokenProvider utility for each line, and each line is completely independent from each other. When the multi-line configuration is enabled with the wrapped, who puts the | at the beginning of each line (after the first one), the grammar replies that the | is not a known command and it cann handle anything else after worse. Removing the UNKNOWN_CMD from the grammar definition will make the hightlight work again as the | string is ignored.
I've asked @luigidellaquila some insight about that specific token and if it was used in the ES codebase. From a quick investigation I did was just a superficial validation layer, not used anywhere else in the code.

@dej611 dej611 added Team:Visualizations Visualization editors, elastic-charts and infrastructure release_note:skip Skip the PR/issue when compiling release notes Feature:ES|QL ES|QL related features in Kibana v8.12.0 labels Nov 28, 2023
@luigidellaquila
Copy link

I've asked @luigidellaquila some insight about that specific token and if it was used in the ES codebase. From a quick investigation I did was just a superficial validation layer, not used anywhere else in the code.

It needs a second check on ES side (I'll do it ASAP) but at a first look it seems safe

@kibana-ci
Copy link
Collaborator

💛 Build succeeded, but was flaky

Failed CI Steps

Metrics [docs]

✅ unchanged

History

To update your PR or re-run it, just comment with:
@elasticmachine merge upstream

@dej611 dej611 marked this pull request as ready for review November 29, 2023 11:24
@dej611 dej611 requested a review from a team as a code owner November 29, 2023 11:24
@elasticmachine
Copy link
Contributor

Pinging @elastic/kibana-visualizations (Team:Visualizations)

Copy link
Contributor

@stratoula stratoula left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug fixed! LGTM!

@dej611 dej611 merged commit 0e8f6cd into elastic:feature/esql-validation Nov 29, 2023
1 check passed
dej611 added a commit that referenced this pull request Dec 7, 2023
## Summary

Fixes #166242 , #166876, #166173
, part of #166092, #166084

List of tasks:

* [x] AST work ( #166185 )
* [x] Basic validate work ( #166185 )
* [x] Hover feature ( #166185 )
* [x] Initial autocomplete work with new AST ( #166185 )
* Complete validation feature for MVP
  * [x] wildcards support ( #170014 )
  * [x] remote index validation support ( #171996 )
  * [x] wildcard support as `count` argument  ( #172054 )
  * [x] Aggressive caching for field queries:
* cache as much as possible the `FROM` queries - possible clear the
cache every 10/15 minutes?
    * do not fire a query when code == submitted code
* cache as much as possible the custom `FROM` built from `ENRICH`
policies - same clear policy as above
  * [x] Add unsupported fields warning messages
  * [x] Notify usage of `project` command with deprecation `warning`
* Complete autocomplete work ( #171664 )
  * [x] `stats`
  * [x] `where`
  * [x] `eval`
    * `math syntax`
  * [x] Aggressive cache for fields queries? ( #171866 )
  * [x] Fix when cursor is not at the end position ( #172060 ) 
* [x] Revisit copy messages
  * Label Kibana-only messages
* [x] Extend hover feature ( #171940 )
* [x] Disable editor query highlight for warnings ( #171968 )
* Fix editor highlight with new grammar
  * [x] on multi-line ( #172080 )
  * [x] for functions ( #172287 )

## Release notes

Enhance ES|QL query editing experience with client side validation.
Enhance ES|QL suggestions experience with more in context suggestions
leveraging field and variable types.
Show meta informations on ES|QL query hover on policy names.
Show function signature on ES|QL query hover on function text.


### Checklist

Delete any items that are not applicable to this PR.

- [x] Any text added follows [EUI's writing
guidelines](https://elastic.github.io/eui/#/guidelines/writing), uses
sentence case text and includes [i18n
support](https://github.com/elastic/kibana/blob/main/packages/kbn-i18n/README.md)
- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [x] Any UI touched in this PR is usable by keyboard only (learn more
about [keyboard accessibility](https://webaim.org/techniques/keyboard/))

---------

Co-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>
Co-authored-by: Stratoula Kalafateli <efstratia.kalafateli@elastic.co>
Co-authored-by: Abdon Pijpelink <abdon.pijpelink@elastic.co>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Feature:ES|QL ES|QL related features in Kibana release_note:skip Skip the PR/issue when compiling release notes Team:Visualizations Visualization editors, elastic-charts and infrastructure v8.12.0
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants