Preserve member completion for Polars conversions such as
dt <- as_polars_df(iris) and for pl$ after calls using the converted frame.
Prepare bounded S3 method return summaries with their owning namespace.
Retain namespace ownership through chained methods and nested argument
expressions. Extend cold member analysis in place from 250 ms up to two
seconds of CPU time, allowing up to five seconds elapsed on busy hosts.
Retain node and depth bounds and cache completed uncertain receivers for
repeated completion, signature help and hover requests. Offer
common known method members as possible-receiver suggestions when a
conversion's input class is unresolved, without claiming a definite type.
Share these possible receivers with signature help and hover when the member
implementation is unambiguous, and display an uncertainty note. Preserve
possible results through member calls and subsequent assignments and aliases.
Reuse completed binding summaries across member-name and argument edits,
following-code changes and different cursor positions. Validate unchanged
preceding source and package attachment context without retaining source
closures or mutable object identities across edits.
Share bounded semantic analysis caches across member and S3 inference, source signature/documentation providers and package NAMESPACE parsing. Reuse completed S3 binding summaries across edits and cursor positions while validating peer-source contents, metadata and registration context. Exclude exhausted and scratch-state results from reuse. Retain exact-text signature and documentation facts across reparses, including unchanged comment blocks in persistent parse workers.
Persist package member models, startup datasets, S3 catalogs, documentation summaries and rendered help in a shared bounded cache. Reuse unchanged models across saves and server sessions; invalidate changes to package files, loaded namespace values, dependencies, registered methods, cache format or server implementation. Verify serialized payload checksums before restoring cached values.
Avoid a server crash when completion, hover or signature help is requested
inside function(), if, for or while while package metadata is loading.
Report errors from queued request readiness checks without stopping the server.
Avoid suggesting function arguments after $ or @ inside a call when
member or slot completion cannot resolve the receiver, including names
enclosed in backticks, single quotes or double quotes.
Keep signature help visible while editing quoted and raw string arguments, including strings spanning multiple lines.
Use LSP 3.18 capabilities for read-only generated package definitions, linked editable names in extraction refactorings, and signature help with no highlighted parameter when an argument matches no formal. Preserve existing behavior for clients without these capabilities, and add documentation links to compatible refactoring menus. Preserve multiline string contents during extraction.
Restore nested sections, definitions and code chunks in document outlines and breadcrumbs, preserving class member symbols (#814, #685).
Promote pending parses for outline requests after edits and report completed parse-worker failures instead of leaving later outline requests queued.
Resolve ordinary S3 methods from statically inferred input classes for
argument completion, argument-value suggestions, hover and signature help
(#805). Share method identity and documentation across providers; support
source aliases, registered namespace methods, datasets, guarded constructors,
namespace-qualified calls and pipes. Preserve generic information when the
input or dispatch is uncertain, and allow S3 inference to be disabled with
r.lsp.s3_dispatch independently of member completion.
Select the correct active signature parameter and parameter-name inlay hints
in native and magrittr piped calls (including %T>%), accounting for the
implicit first argument and explicit native _ or magrittr . placeholders.
Preserve member completion, hover and signatures for native pipe callees; resolve piped class names and inheritance in type hierarchy; count bare magrittr stages in call hierarchy and CodeLens. Allow extraction of independent expressions inside pipe arguments, while keeping whole-RHS and placeholder-dependent expressions in their pipe context; whole-pipe extraction remains available.
Restore diagnostics and queued document color/CodeLens replies when opening files or untitled buffers without a workspace folder (#794).
Keep known R6 member signatures and hover when initializer analysis reaches its inference limit. Select members directly from the inferred receiver and allow more time in parallel tests without changing the normal request budget.
Complete bindings available in R6 method scopes, including self, private,
super, inherited members in non-portable classes, and nested closures,
using static context analysis during incomplete edits. Respect method-local
shadowing and prefer class bindings over enclosing declarations. Include
class information in completion, hover and signature help, and derive R6
new() signatures and argument completion from public initializers.
Preserve Polars member completion, signature help and hover when other packages are cached. Prefer receiver roots over incidental exported names and keep metadata requested by open documents ahead of background entries. Retain compact inert snapshots so indexes evicted from the decoded cache can be restored when multiple open documents need large package metadata. Use compact catalogs for context selection and restore full namespace indexes only when inference needs them, avoiding repeated eviction on each request.
Keep parameter-name inlay hints for untouched calls during incomplete edits, moving their positions with incremental changes and refreshing after a valid parse, so a temporary syntax error does not clear hints across the document.
Enclose non-syntactic completion names in backticks and preserve escaped names in function snippets, including completion inside partially typed quoted names (#781).
Complete chained $ members using static receiver analysis, including source
list/environment factories, declarative R6 classes and package method
registries. Package metadata is prepared in a background worker; completion
never calls document expressions, constructors, methods or active getters.
Preserve member completion for assigned and reassigned Polars query chains,
including DataFrame results after collect(), within the inference budget.
Use the same static member inference for signature help and hover, including
chained methods and named argument documentation. Member requests wait for the
current parse after edits, fixing stale completions on the first $ trigger.
Resolve member names across line breaks and infer self, super and
private inside supported R6 methods for completion, hover and signatures.
Extend member completion, signature help and hover to package factories backed
by internal R6 classes and methods assigned during initialization. Support
namespace-qualified factories and R6 constructors without a library() call,
without executing constructors, methods or user arguments.
Complete S4 @ slots from source declarations and installed class metadata,
including inheritance, aliases and factory results. Show slot types on hover
and signatures for slots whose function definitions are known statically.
Complete S7 @ properties and constructor arguments from source declarations
and installed descriptors, with constructor/property hover and signatures.
Infer inheritance, nested properties and supported custom constructors
without calling constructors, getters, setters, validators or defaults.
Follow installed S7 constructor semantics, including 1.0 development class
references, forwarding constructors, named bindings, list property updates,
external class references, S4 parents and deprecation declarations.
Resolve $ and @ member completion, signature help, and hover for static
namespace objects, lists, data frames, pairlists, stored S4/R6 values, and
lazy-loaded package datasets without invoking custom accessors or coercion
hooks (#818).
Make index_mode = "auto" package-aware so standalone workspaces index open
files and their static source()/sys.source() dependencies lazily while
triggering shared background scans on demand for workspace symbols and global
references (#815).
Keep hover, signature help, and completion responsive while workspace indexing,
parsing, S3 catalog building, and member-model preparation run in the
background, streaming indexing progress via window/workDoneProgress (#812, #811, #798).
Support pluggable diagnostics and formatting backends through R adapters,
including built-in support for jarl diagnostics and air formatting
alongside the default lintr and styler backends (#809, #776). lintr and
styler have moved from Imports to Suggests, so the language server
itself does not require lintr or styler and
install.packages("languageserver") no longer installs them automatically;
users must install or upgrade lintr (>= 3.3.0-1) and install styler to
keep the default diagnostics and formatting, or select other backends.
Skip COMMENT parse nodes and ignore computed callees when resolving function
calls and placing inlay hints (#807, #800, #799).
Reduce worker scheduling, parse, and hot-path provider latency by precomputing shared syntax/scope indexes in C, omitting eager XML serialization from worker snapshots, and caching receiver analysis per document (#802, #795, #793).
Preserve R6 class context for self, super, private, and aliases after
member assignments within methods (#797).
Fix URI escaping for reserved filename characters, multiline $/::/:::
reference classification, overlapping raw-string scanning, and unsaved buffer
transfers across workspace folder changes (#796).
Require R (>= 4.0.0) and modernize R 4.0 syntax; require lintr (>= 3.3.0-1)
when using the lintr diagnostics backend, dropping legacy lintr
workarounds (#813, #783).
Honor .lintr settings from the working directory when linting pathless and
untitled documents (#782).
Prevent function completions from inserting duplicate call parentheses when an opening parenthesis already follows the token (#779, #778).
Populate NAMESPACE imports and DESCRIPTION Depends packages in
diagnostics globals so lintr::object_usage_linter() recognizes imported
symbols and cross-file package functions (#775, #773, #652).
Preserve missing terminal newline state during diagnostics and provide a preferred quick fix for trailing_blank_lines_linter (#774, #772).
Respond to shutdown with a null result instead of [], which clients that type the result strictly fail to decode (#789).
Closed issues:
lintr error although lintr::lint_package() does not (#652)languageserver doesn't use .lintr file? (#557)Merged pull requests:
null result instead of [] (#789)result and error in JSON-RPC responses
per the JSON-RPC 2.0 specification, preventing strict clients like Neovim from
disconnecting on errors (#768, #766).reference_resolve_local_c() by guarding qsort and
avoiding zero-length allocations when definitions or occurrences are empty (#767).Closed issues:
.lintr config and diagnostics not clearing when disabled (#726)Merged pull requests:
.qmd and Quarto language
ID detection, independent R-cell parsing, nested fenced-div folding, and
provider isolation from YAML, Markdown, cell options, and non-R engines.source() closures. Keep
unrelated standalone scripts isolated in semantic editor features.callr workers when cancelling tasks so a late interrupt
cannot leak into the next diagnostics run.lintr diagnostics and a conflict-aware
source.fixAll action, while making multi-line nolint actions apply to every
affected line.refactor.extract actions for variables and functions with
local free-variable analysis, plus a conservative refactor.inline action
for single-use local variables.label type.callr subprocesses after transient parse errors or representation
changes while preserving package attachment order (#754).STR_CONST in xdoc_find_token() at ambiguous punctuation/string boundaries (#739, #740).extract_default_values() (#759).Closed issues:
resolve_attached_packages) spawns fresh R subprocess on keystrokes in Quarto/R Markdown documents (#754)xdoc_find_token resolves to adjacent punctuation instead of string literal at unspaced quote (#739)diagnose_file: empty path crash and .lintr config never applied when using text= argument (#722)Merged pull requests:
xdoc_find_token() now prefers STR_CONST at ambiguous punctuation/string boundaries (#740)Closed issues:
call[[1L]] (#723)Merged pull requests:
Closed issues:
lintr warnings (#674)Merged pull requests:
# %% code chunks (#644)nline_to_break_succession as option (#643)Closed issues:
nline_to_break_succession option to control section collapsing (#643)Merged pull requests:
path_from_uri (#610)Closed issues:
Merged pull requests:
Closed issues:
html-to-markdown.lua error: attempt to call a nil value (#555)Merged pull requests:
Closed issues:
Merged pull requests:
languageId (#511)fs::path_abs with existing files (#506)completionItem/resolve always returns completionItem (#505)Closed issues:
= differs from functions assigned with <- (#466)Merged pull requests:
get_help instead of repr (#469)EQ_ASSIGN (#467)Closed issues:
workspace/didChangeWatchedFiles (#446)Merged pull requests:
workspace/didChangeWatchedFiles (#447)Closed issues:
styler::style_text(base_indention=) for styler > 1.4.0 (#400)Merged pull requests:
._ from namespace (#406)