TalkCodyTalkCody
功能

LSP 语言服务

使用 LSP 获取智能代码提示和诊断

什么是 LSP?

LSP(Language Server Protocol) 是微软开发的语言服务协议,用于在编辑器和语言服务器之间提供标准化的通信。

TalkCody 集成了 LSP 支持,为您提供专业 IDE 级别的代码智能功能,包括:

  • 代码诊断:实时显示语法错误和警告
  • 跳转到定义:快速导航到符号定义位置
  • 查找引用:查看符号在代码中的所有使用位置
  • 悬停信息:查看类型信息和文档
  • 代码补全:智能代码自动完成

支持的语言

TalkCody 支持以下 7 种编程语言的 LSP 服务:

语言语言服务器支持的文件扩展名
TypeScripttypescript-language-server.ts, .tsx, .mts, .cts
JavaScripttypescript-language-server.js, .jsx, .mjs, .cjs
Rustrust-analyzer.rs
PythonPyright.py, .pyi
Gogopls.go
Cclangd.c, .h
C++clangd.cpp, .cc, .cxx, .c++, .hpp, .hh, .hxx, .h++

TSX 和 JSX 文件会被正确识别为 React 组件,确保 LSP 服务器提供准确的类型检查和代码补全。


功能特性

代码诊断

LSP 会实时分析您的代码,在编辑器中显示错误和警告:

严重级别说明显示颜色
Error语法错误、类型错误等红色
Warning潜在问题、弃用警告等黄色
Information信息提示蓝色
Hint代码建议灰色

诊断信息会以波浪线的形式显示在代码下方,悬停可查看详细描述。

跳转到定义

在符号上点击或使用快捷键,可以快速跳转到该符号的定义位置。支持:

  • 变量和常量定义
  • 函数和方法定义
  • 类和接口定义
  • 类型别名定义
  • 导入模块定义

查找引用

查看某个符号在整个项目中的所有使用位置,包括:

  • 直接引用
  • 导入语句
  • 类型注解
  • 声明位置

悬停信息

将鼠标悬停在符号上,可以查看:

  • 类型信息
  • 函数签名
  • JSDoc/文档注释
  • 参数说明

代码补全

输入代码时,LSP 提供智能补全建议:

  • 变量和函数名
  • 属性和方法
  • 导入建议
  • 代码片段

配置选项

启用/禁用 LSP

LSP 默认启用。如需禁用,可以在设置中关闭:

  1. 打开 设置
  2. 找到 LSP 部分
  3. 关闭 Enable LSP 开关

诊断显示设置

您可以自定义显示哪些级别的诊断信息:

设置项默认值说明
Show Diagnostics开启是否显示诊断信息
Show Errors开启显示错误级别诊断
Show Warnings开启显示警告级别诊断
Show Info开启显示信息级别诊断
Show Hints关闭显示提示级别诊断

如果您觉得诊断信息太多,可以关闭 Hints 和 Info 级别,只保留 Errors 和 Warnings。


自动安装

语言服务器自动下载

当您首次打开某种语言的文件时,TalkCody 会检查对应的语言服务器是否已安装:

  • 已安装:自动启动语言服务器
  • 未安装但可下载:显示下载提示,点击即可自动安装
  • 需要手动安装:显示安装说明

下载过程中会显示进度条,完成后语言服务器会自动启动。

手动安装方法

如果自动下载失败,可以手动安装语言服务器:

TypeScript/JavaScript

npm install -g typescript typescript-language-server

Rust

rustup component add rust-analyzer

Python

pip install pyright
# 或使用 npm
npm install -g pyright

Go

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

C/C++

# macOS
brew install llvm

# Ubuntu/Debian
sudo apt install clangd

# Windows
# 从 https://releases.llvm.org/ 下载安装

工作区检测

TalkCody 会智能检测项目的工作区根目录,以便 LSP 服务器正确理解项目结构。

检测规则

不同语言使用不同的标识文件(按优先级顺序):

语言根目录标识文件
TypeScriptpackage-lock.json, bun.lockb, bun.lock, pnpm-lock.yaml, yarn.lock, tsconfig.json, package.json
JavaScriptpackage-lock.json, bun.lockb, bun.lock, pnpm-lock.yaml, yarn.lock, jsconfig.json, package.json
RustCargo.toml, Cargo.lock
Pythonpyproject.toml, setup.py, setup.cfg, requirements.txt, Pipfile, pyrightconfig.json
Gogo.work, go.mod, go.sum
C/C++compile_commands.json, compile_flags.txt, .clangd, CMakeLists.txt, Makefile

支持添加新的语言吗?

目前支持的语言是预配置的。如果您需要其他语言的支持,可以在 GitHub Issues 提交功能请求。