Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Language Support

codescout provides three tiers of support depending on which backends are available for a given language.

  • Full support — LSP server + tree-sitter grammar. All symbol tools work, and richer AST extraction is available internally. Semantic search is also available after indexing.
  • LSP only — LSP server configured, no tree-sitter grammar. Symbol navigation, references, and rename work.
  • Detection only — Language is recognized for chunking and file detection. No LSP server and no tree-sitter grammar. Only file operations and semantic search (after indexing) are available.

Supported Languages

LanguageExtensionsLSP ServerSupport Level
Bash.sh, .bashbash-language-serverFull
Go.gogoplsFull
Java.javajdtlsFull
Kotlin.kt, .ktskotlin-lsp (JetBrains)Full
Python.pypyright-langserverFull
Rust.rsrust-analyzerFull
TypeScript.tstypescript-language-serverFull
TSX.tsxtypescript-language-serverFull
JavaScript.jstypescript-language-serverLSP only
JSX.jsxtypescript-language-serverLSP only
C.cclangdLSP only
C++.cpp, .cc, .cxxclangdLSP only
C#.csOmniSharpLSP only
Ruby.rbsolargraphLSP only
HTML.html, .htmvscode-html-language-serverLSP only
CSS.cssvscode-css-language-serverLSP only
SCSS.scssvscode-css-language-serverLSP only
Less.lessvscode-css-language-serverLSP only

Detection-Only Languages

These languages are recognized for chunking and file detection. No LSP server is configured and no tree-sitter grammar is bundled.

LanguageExtensions
PHP.php
Swift.swift
Scala.scala
Elixir.ex, .exs
Haskell.hs
Lua.lua
Markdown.md

Feature Matrix

FeatureFull supportLSP onlyDetection only
symbolsYesYesNo
referencesYesYesNo
symbol_atYesYesNo
call_graphYesYesNo
edit_codeYesYesNo
semantic_searchYesYesYes
File toolsYesYesYes

Installing LSP Servers

codescout looks for each LSP server binary on PATH. The quickest way to get started is the bundled install script:

# See what's installed and what's missing
./scripts/install-lsp.sh --check

# Install all supported LSP servers
./scripts/install-lsp.sh --all

# Install specific languages only
./scripts/install-lsp.sh rust python typescript go

The script supports Linux and macOS, detects your package managers, and skips servers that are already installed. For manual installation, see the per-language instructions below.

Rust

rustup component add rust-analyzer

Binary: rust-analyzer

Python

npm install -g pyright

Binary: pyright-langserver, invoked with --stdio.

TypeScript, JavaScript, TSX, JSX

npm install -g typescript-language-server typescript

Binary: typescript-language-server, invoked with --stdio. One installation covers TypeScript, JavaScript, TSX, and JSX.

Go

go install golang.org/x/tools/gopls@latest

Binary: gopls. Ensure $(go env GOPATH)/bin is on PATH.

Java

jdtls (Eclipse JDT Language Server) is distributed as a standalone archive from the Eclipse downloads page. Unpack and place the launcher script on PATH.

Binary: jdtls

Kotlin

kotlin-lsp (JetBrains) is distributed as a release archive on the GitHub releases page. Unpack and place the kotlin-lsp script on PATH.

Binary: kotlin-lsp, invoked with --stdio. Each codescout instance automatically passes --system-path to isolate its workspace cache.

C and C++

clangd is shipped with LLVM/Clang. Install via your system package manager:

# Debian/Ubuntu
sudo apt install clangd

# macOS
brew install llvm   # or: xcode-select --install

# Fedora/RHEL
sudo dnf install clang-tools-extra

Binary: clangd. One installation covers both C and C++.

C#

OmniSharp is bundled with the .NET SDK or available as a standalone binary. The standalone build can be downloaded from the OmniSharp releases page. Place the binary on PATH.

Binary: OmniSharp (note the capital O), invoked with -lsp.

Ruby

gem install solargraph

Binary: solargraph, invoked with stdio (no leading --).


HTML and CSS

npm install -g vscode-langservers-extracted

One package installs both servers. Binaries: vscode-html-language-server (HTML) and vscode-css-language-server (CSS, SCSS, Less), each invoked with --stdio.

Bash

npm install -g bash-language-server

Binary: bash-language-server, invoked with start (positional argument — not --stdio).


Known Quirks

jdtls requires a data/workspace directory for project indexes. Some wrapper scripts accept --data to specify this path. If symbol tools return empty results, check whether jdtls started correctly by examining the server log. The JAVA_HOME environment variable should point to a JDK 17+ installation.

OmniSharp binary name starts with a capital O (OmniSharp, not omnisharp). On case-sensitive filesystems the name must match exactly. Some distributions ship a lowercase alias; check with which OmniSharp before assuming the server is unavailable.

solargraph takes a positional argument (stdio) rather than a flag (--stdio). This differs from most other servers. The invocation is solargraph stdio, not solargraph --stdio.

kotlin-lsp (JetBrains) has a single workspace session limitation: only one kotlin-lsp process can serve a given project directory at a time. If another codescout instance or editor is already running kotlin-lsp for the same project, new instances fail with “Multiple editing sessions for one workspace are not supported yet”. codescout detects this and fails fast with a clear error. Workaround: close the other session first, or use a single codescout instance for Kotlin projects. JetBrains plans to lift this restriction in a future release.

kotlin-lsp also builds a project index on first startup (JVM bootstrap + Gradle import), which takes 8–15 seconds. codescout retries the LSP handshake during this window automatically.

typescript-language-server handles JavaScript and JSX in addition to TypeScript and TSX. The LSP languageId sent for TSX files is typescriptreact and for JSX files is javascriptreact — this is handled internally and requires no configuration.