Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

All notable changes to R Console will be documented in this file.

## [0.2.4] - 2026-05-13

### Fixed
- Fixed console LSP startup on Windows by using a consistent loopback host between VS Code and the R language server helper.
- Preserved the inherited environment when spawning the console LSP R process.
- Avoided repeated semantic token retry loops when semantic tokens are unavailable.

## [0.2.3] - 2026-05-10

### Added
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "vsc-r-console",
"displayName": "R Console for VS Code",
"description": "A lightweight R console for VS Code",
"version": "0.2.3",
"version": "0.2.4",
"publisher": "RConsole",
"license": "MIT",
"icon": "images/Rlogo.png",
Expand Down
4 changes: 3 additions & 1 deletion resources/r/console-language-server.R
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@ if (!requireNamespace("languageserver", quietly = TRUE)) {
}

debug <- Sys.getenv("VSCR_LSP_DEBUG")
host <- Sys.getenv("VSCR_LSP_HOST")
port <- Sys.getenv("VSCR_LSP_PORT")

debug <- if (nzchar(debug)) as.logical(debug) else FALSE
host <- if (nzchar(host)) host else "127.0.0.1"
port <- if (nzchar(port)) as.integer(port) else NULL

tools::Rd2txt_options(underline_titles = FALSE)
Expand Down Expand Up @@ -101,7 +103,7 @@ console_text_document_did_close <- function(self, params) {
languageserver:::text_document_did_close(self, params)
}

server <- languageserver:::LanguageServer$new("localhost", port)
server <- languageserver:::LanguageServer$new(host, port)
server$request_handlers[["rConsole/syncSessionState"]] <- function(self, id, params) {
attached_packages <- normalize_character(params$attachedPackages)
loaded_namespaces <- normalize_character(params$loadedNamespaces)
Expand Down
7 changes: 5 additions & 2 deletions src/Language/consoleLspClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ import { SemanticTokensRequest } from "vscode-languageserver-protocol";
import type { CompletionProvider } from "./completion";
import type { SessionMemberCompletionItem } from "../Runtime/sessionWatcher";

const CONSOLE_LSP_HOST = "127.0.0.1";

type ConsoleLspClientOptions = {
consoleId: string;
extensionPath: string;
Expand Down Expand Up @@ -457,7 +459,7 @@ export class ConsoleLspClient implements CompletionProvider {
rejectOnce(new Error("Console language server socket closed before connection."));
});

server.listen(0, "127.0.0.1", () => {
server.listen(0, CONSOLE_LSP_HOST, () => {
const address = server.address();
if (!address || typeof address === "string") {
this.pendingSocketServer = undefined;
Expand All @@ -467,6 +469,7 @@ export class ConsoleLspClient implements CompletionProvider {
}
const env: NodeJS.ProcessEnv = {
...baseEnv,
VSCR_LSP_HOST: CONSOLE_LSP_HOST,
VSCR_LSP_PORT: String(address.port),
};
const child = spawn(this.options.rPath, args, {
Expand Down Expand Up @@ -553,7 +556,7 @@ export class ConsoleLspClient implements CompletionProvider {
}

private buildServerEnv(config: vscode.WorkspaceConfiguration): NodeJS.ProcessEnv {
const env: NodeJS.ProcessEnv = Object.create(process.env);
const env: NodeJS.ProcessEnv = { ...process.env };
const debug = config.get<boolean>("lsp.debug") === true;
const useRenvLibPath = config.get<boolean>("useRenvLibPath") === true;
const lang = config.get<string>("lsp.lang") ?? "";
Expand Down
15 changes: 13 additions & 2 deletions src/Terminal/consoleSyntax.ts
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,19 @@ export class ConsoleSyntax implements RendererLineHighlighter {
) {
const requestedVersion = this.wantedSemanticVersion;
const requestedContent = this.sourceKey;
const semanticTokens = await this.requestSemantics(requestedContent);
if (!semanticTokens || requestedVersion !== this.sourceVersion) {
let semanticTokens: DocumentSemanticTokensResult | undefined;
try {
semanticTokens = await this.requestSemantics(requestedContent);
} catch {
semanticTokens = undefined;
}

if (requestedVersion !== this.sourceVersion) {
continue;
}

if (!semanticTokens) {
this.appliedSemanticVersion = requestedVersion;
continue;
}

Expand Down
Loading