[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: State of the overlay tree branch?
From: |
Sebastien Chapuis |
Subject: |
Re: State of the overlay tree branch? |
Date: |
Wed, 21 Mar 2018 15:14:18 +0100 |
User-agent: |
mu4e 0.9.19; emacs 27.0.50 |
Eli Zaretskii writes:
>> From: Sebastian Sturm <address@hidden>
>> Date: Sun, 18 Mar 2018 21:14:53 +0100
>>
>> [1] I'm using cquery for my C++ editing needs, which comes with an
>> overlay-based semantic highlighting mechanism. With my emacs
>> configuration, lsp-mode/lsp-ui emit 6 calls to line-number-at-pos per
>> character insertion, which consume ~20 to 25 ms each when performing
>> edits close to the bottom of a 66KB C++ file (measured using
>> (benchmark-run 1000 (line-number-at-pos (point))) on a release build of
>> emacs-27/git commit #9942734...). Using the noverlay branch, this figure
>> drops to ~160us per call.
>
> If lsp-mode/lsp-ui needs a fast line counter, one can easily be
> provided by exposing find_newline to Lisp. IME, it's lightning-fast,
> and should run circles around count-lines (used by line-number-at-pos).
>
> (I'm not sure I even understand how overlays come into play here,
> btw.)
The language server protocol defines a position in file with zero-indexed
line and column offsets [1]:
```
interface Position {
line: number;
character: number;
}
```
lsp-mode uses heavily line-number-at-pos to convert an Emacs buffer
point to a LSP position, and vice-versa [2].
This can happen thousands times on each keystroke.
If Emacs could provide a function to do the conversion very fast (or at
least faster than with line-number-at-pos), it would be great.
[1]
https://github.com/Microsoft/language-server-protocol/blob/gh-pages/specification.md#position
[2] The conversion from a LSP position to point doesn't use
line-number-at-pos, but forward-line and forward-char. It's still very slow.
--
Sebastien Chapuis
- Re: State of the overlay tree branch?, (continued)
- RE: State of the overlay tree branch?, Drew Adams, 2018/03/18
- Re: State of the overlay tree branch?, Stefan Monnier, 2018/03/18
- Re: State of the overlay tree branch?, Eli Zaretskii, 2018/03/19
- Re: State of the overlay tree branch?, Stefan Monnier, 2018/03/19
- Re: State of the overlay tree branch?, Eli Zaretskii, 2018/03/19
- Re: State of the overlay tree branch?, Stefan Monnier, 2018/03/19
- Re: State of the overlay tree branch?, Eli Zaretskii, 2018/03/19
- Re: State of the overlay tree branch?, Stefan Monnier, 2018/03/19
- Re: State of the overlay tree branch?, Eli Zaretskii, 2018/03/19
Re: State of the overlay tree branch?,
Sebastien Chapuis <=
Re: State of the overlay tree branch?, Stefan Monnier, 2018/03/26