pub enum PositionEncoding {
Utf8,
Utf16,
}Expand description
LSP position-encoding negotiated with the client at initialization.
Per LSP 3.17, a client advertises which encodings it accepts via
InitializeParams.capabilities.general.positionEncodings. The
server replies with the encoding it will use; clients that don’t
negotiate get the default (UTF-16). Modern editors (VS Code,
neovim, helix, zed) negotiate UTF-8 because that’s cheaper than
re-encoding every diagnostic position.
All position emission paths in the LSP layer should consult this
type — emitting LSP positions in a different encoding than the
negotiated one will misalign on non-ASCII content. Today most
handlers in this crate emit byte (UTF-8) offsets via
LineIndex::offset_to_position; that works under UTF-8
negotiation but is wrong for UTF-16-only clients. See
server.rs::run for the negotiation site and MainLoopState
for the storage.
Variants§
Utf8
UTF-8 byte offsets. The native unit of the underlying source representation; preferred by modern editors.
Utf16
UTF-16 code units. The LSP 3.17 default for clients that don’t negotiate.
Implementations§
Source§impl PositionEncoding
impl PositionEncoding
Sourcepub fn from_negotiated(negotiated: Option<&PositionEncodingKind>) -> Self
pub fn from_negotiated(negotiated: Option<&PositionEncodingKind>) -> Self
Decide the negotiated encoding from a ServerCapabilities-
shaped value. Some(UTF8) → UTF-8; None → UTF-16 (the
LSP default).
Trait Implementations§
Source§impl Clone for PositionEncoding
impl Clone for PositionEncoding
Source§fn clone(&self) -> PositionEncoding
fn clone(&self) -> PositionEncoding
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreimpl Copy for PositionEncoding
Source§impl Debug for PositionEncoding
impl Debug for PositionEncoding
impl Eq for PositionEncoding
Source§impl PartialEq for PositionEncoding
impl PartialEq for PositionEncoding
impl StructuralPartialEq for PositionEncoding
Auto Trait Implementations§
impl Freeze for PositionEncoding
impl RefUnwindSafe for PositionEncoding
impl Send for PositionEncoding
impl Sync for PositionEncoding
impl Unpin for PositionEncoding
impl UnsafeUnpin for PositionEncoding
impl UnwindSafe for PositionEncoding
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.