Skip to main content

Features

Core Language Features

FeatureDescription
Syntax HighlightingFull semantic token-based highlighting
Code CompletionIntelligent autocomplete with snippets
Go to DefinitionNavigate to symbol definitions (F12)
Find ReferencesFind all usages of a symbol
Hover InformationType info, documentation, deprecation warnings
DiagnosticsReal-time syntax error detection
Signature HelpParameter hints while typing

Advanced Features

FeatureDescription
Rename SymbolSafely rename across files (F2)
Call HierarchyView incoming/outgoing calls
Type HierarchyExplore class inheritance
Code LensReference counts above functions
Document LinksClickable paths in comments
Inlay HintsParameter name hints
Workspace SymbolsSearch symbols project-wide
Code ActionsQuick fixes and organize imports
FormattingDocument and range formatting
Smart CompletionScope operator (::, ->) completion with deprecated tag support
Linked EditingMulti-cursor editing for linked ranges
Rate LimitingConfigurable rate limiter for LSP requests
AutoDoc RenderingFull AutoDoc tag support (@returns, @mapping, @member)
Nested ClassesRecursive extraction up to depth 5 with full symbol resolution
Preprocessor ExtractionToken-based symbol extraction from conditional blocks

Performance

  • Parses 1000+ line files in ~15ms
  • Batch parsing for fast workspace indexing
  • Smart caching for stdlib modules
  • 100% Pike 8 stdlib compatibility
  • Modular architecture (TypeScript + Pike 8.1116)
  • Runtime path discovery for cross-installation compatibility
  • Hash-based cache eviction (7.2% faster on cache-intensive workloads)
info

View live benchmarks: thesmuks.github.io/pike-lsp

Known Limitations

LimitationDescriptionImpact
Preprocessor DirectivesSymbols inside #if/#else/#endif blocks are now indexed using token-based extraction.Conditional symbols are now visible in outline, completion, and hover.
Nested ClassesNested class declarations are recursively extracted up to depth 5.Go-to-definition, hover, and completion work for nested class members at all levels.
Type InferenceBasic types from literals and signatures work.Complex flow-sensitive analysis is not implemented.
Dynamic ModulesRuntime-loaded modules cannot be analyzed.Completion won't show symbols from dynamically loaded code.
Deep NestingNested classes deeper than 5 levels are capped for performance.Very deep nesting (>5 levels) may have limited symbol extraction.