pub struct FullTextDocument { /* private fields */ }Implementations§
Source§impl FullTextDocument
impl FullTextDocument
pub fn new(language_id: String, version: i32, content: String) -> Self
Sourcepub fn new_with_encoding(
language_id: String,
version: i32,
content: String,
encoding: PositionEncodingKind,
) -> Self
pub fn new_with_encoding( language_id: String, version: i32, content: String, encoding: PositionEncodingKind, ) -> Self
Create a new text document with a specific position encoding
This method allows you to create a text document with a specific position encoding for character positions. The encoding determines how character offsets are calculated and is important for proper LSP communication between client and server.
Use this method instead of new() when you need to use a position encoding
other than UTF-16, or when you want to explicitly specify the encoding to match what
was negotiated with the LSP client during initialization.
§Arguments
language_id- The language identifier for the document (e.g., “rust”, “javascript”)version- The version number of the documentcontent- The full text content of the documentencoding- The position encoding to use. Can be UTF-8, UTF-16, or UTF-32.
§Position Encodings
- UTF-16: The default encoding for backward compatibility with LSP 3.16 and earlier.
Each UTF-16 code unit counts as one position unit. Use
new()for this. - UTF-8: Each byte counts as one position unit. More efficient for ASCII-heavy text.
- UTF-32: Each Unicode code point counts as one position unit.
§Examples
Basic usage with UTF-16 (default):
use lsp_textdocument::FullTextDocument;
use lsp_types::PositionEncodingKind;
let doc = FullTextDocument::new_with_encoding(
"rust".to_string(),
1,
"fn main() {}".to_string(),
PositionEncodingKind::UTF16
);Using UTF-8 encoding for better performance with ASCII text:
use lsp_textdocument::FullTextDocument;
use lsp_types::PositionEncodingKind;
let doc = FullTextDocument::new_with_encoding(
"javascript".to_string(),
1,
"console.log('Hello');".to_string(),
PositionEncodingKind::UTF8
);Using UTF-32 encoding where each Unicode code point is one unit:
use lsp_textdocument::FullTextDocument;
use lsp_types::PositionEncodingKind;
let doc = FullTextDocument::new_with_encoding(
"plain".to_string(),
1,
"Hello 🦀 World".to_string(),
PositionEncodingKind::UTF32
);pub fn update( &mut self, changes: &[TextDocumentContentChangeEvent], version: i32, )
Sourcepub fn language_id(&self) -> &str
pub fn language_id(&self) -> &str
Document’s language id
Sourcepub fn encoding(&self) -> PositionEncodingKind
pub fn encoding(&self) -> PositionEncodingKind
Returns the position encoding kind used by this document when converting between LSP positions and byte offsets.
Sourcepub fn get_content(&self, range: Option<Range>) -> &str
pub fn get_content(&self, range: Option<Range>) -> &str
Get document content
§Examples
Basic usage:
use lsp_textdocument::FullTextDocument;
use lsp_types::{Range, Position};
let text_documents = FullTextDocument::new("plain_text".to_string(), 1, "hello rust!".to_string());
// get document all content
let content = text_documents.get_content(None);
assert_eq!(content, "hello rust!");
// get document specify content by range
let (start, end) = (Position::new(0, 1), Position::new(0, 9));
let range = Range::new(start, end);
let sub_content = text_documents.get_content(Some(range));
assert_eq!(sub_content, "ello rus");Sourcepub fn line_count(&self) -> u32
pub fn line_count(&self) -> u32
A amount of document content line
Sourcepub fn content_len(&self) -> u32
pub fn content_len(&self) -> u32
The length of the document content in UTF-8 bytes
Sourcepub fn position_at(&self, offset: u32) -> Position
pub fn position_at(&self, offset: u32) -> Position
Converts a zero-based byte offset in the UTF8-encoded content to a position
the offset is in bytes, the position is in UTF16 code units. rounds down if the offset is not on a code unit boundary, or is beyond the end of the content.