perl-position-tracking 0.11.0

UTF-8/UTF-16 position tracking and conversion for Perl LSP
Documentation

perl-position-tracking

UTF-8/UTF-16 position tracking and conversion for the Perl LSP ecosystem.

Part of tree-sitter-perl-rs.

Public API

  • ByteSpan / SourceLocation -- byte-offset span for parser and AST nodes
  • LineStartsCache -- line-start index for offset-to-position conversion (borrows text)
  • LineIndex -- owning line index with UTF-16 column support
  • PositionMapper -- rope-backed mapper with incremental edit support and line-ending detection
  • WirePosition / WireRange / WireLocation -- LSP wire-protocol position types
  • Position / Range -- engine types with 1-based line/column and byte offset
  • offset_to_utf16_line_col / utf16_line_col_to_offset -- standalone conversion functions
  • LineEnding -- detected line-ending style (LF, CRLF, CR, Mixed)

Enable the lsp-compat feature for bidirectional From conversions with lsp_types.

Example

use perl_position_tracking::{ByteSpan, LineStartsCache};

let source = "line 1\nline 2\nline 3";
let cache = LineStartsCache::new(source);

let span = ByteSpan::new(7, 13);
assert_eq!(span.slice(source), "line 2");

let (line, col) = cache.offset_to_position(source, span.start);
assert_eq!((line, col), (1, 0)); // 0-indexed line/UTF-16 column

License

MIT OR Apache-2.0