Kiro CLI配置LSP(Language Server Protocol)用于Kotlin语言开发
本文介绍如何在 Kiro CLI 中为 Kotlin 语言配置 LSP(Language Server Protocol),包括安装 kotlin-language-server、修改 lsp.json 配置文件,以及使用代码智能功能如查找引用、跳转定义和类型悬浮提示。
一、背景
Kiro CLI内置了Tree-sitter引擎,可识别18种语言,为这些语言提供代码补全能力。如果您还需要进一步的代码能力,例如查找参考文档、跳转到定义、悬浮显示、重命名重构、以及调试排错等,那么需要安装额外的Language Server并通过LSP(Language Server Protocol)进行调用。
本文介绍为Kotlin语言安装Language Server。
二、安装Language Server
1、官方支持的Language Server
| Language | Extensions | Server |
|---|---|---|
| TypeScript/JavaScript | .ts, .js, .tsx, .jsx | typescript-language-server |
| Rust | .rs | rust-analyzer |
| Python | .py | pyright |
| Go | .go | gopls |
| Java | .java | jdtls |
| Ruby | .rb | solargraph |
| C/C++ | .c, .cpp, .h, .hpp | clangd |
| Kotlin | .kt, .kts | kotlin-language-server |
2、安装kotlin-language-server
MacOS系统有现成的安装包,使用如下命令:
brew install kotlin-language-server
Ubuntu Linux系统安装也可以使用homebrew,因为Ubuntu系统也可以安装Homebrew包管理工具。如果不想安装的话,那么需要从Github上下载最新release版本。访问如下网址查看最新版本:
https://github.com/fwcd/kotlin-language-server/releases
下载最新版本的server.zip二进制包,并完成安装。执行如下命令:
wget https://github.com/fwcd/kotlin-language-server/releases/download/1.3.13/server.zip
unzip server.zip
mv server kotlin-language-server
由此在本机上就有了Language Server。这里不需要事先启动,Kiro CLI配置完成LSP对接后,会自己启动它。
三、Kiro CLI使用Language Server(LSP)
1、新建Kiro CLI项目
先在shell下进入项目内,然后执行kiro-cli启动Kiro。执行如下命令开始配置Language Server(即LSP)。
/code init
此时可以看到Kiro初始化了本项目的目录,但是没有检测出来语言和Language Server。接下来要手工配置。
✓ Workspace initialization started
Workspace: /home/lxy2/Documents/ec2-power-Kotlin
Detected Languages: []
Available LSPs:
○ clangd (cpp) - not installed
○ gopls (go) - not installed
○ jdtls (java) - not installed
○ pyright (python) - not installed
○ rust-analyzer (rust) - not installed
○ solargraph (ruby) - not installed
○ typescript-language-server (typescript) - not installed
Configuration can be updated at .kiro/settings/lsp.json
Learn more at https://kiro.dev/docs/cli/code-intelligence/
2、修改LSP配置文件
上一步在当前项目目录下,生成了.kiro/settings/lsp.json文件,但里边是模版,不是有效配置。我们将其改名,然后重新创建一个空白文件。执行如下命令
mv .kiro/settings/lsp.json .kiro/settings/lsp.json-default
touch .kiro/settings/lsp.json
编辑配置文件.kiro/settings/lsp.json,内容如下:
{
"languages": {
"kotlin": {
"name": "kotlin-language-server",
"command": "/home/lxy2/Documents/kotlin-language-server/bin/kotlin-language-server",
"args": [],
"file_extensions": ["kt", "kts"],
"project_patterns": ["build.gradle.kts", "build.gradle", "pom.xml"]
}
}
}
请替换其中的路径为下载并解压缩language-server的路径,并设置command为bin目录下的可执行文件。
配置完毕,执行/quit命令退出Kiro CLI。然后重新启动Kiro CLI。
重新启动后,执行/code status命令,可以看到Language Server正在初始化。
◐ Workspace initialization in progress...
Workspace: /home/lxy2/Documents/ec2-power-Kotlin
Detected Languages: ["kotlin"]
Project Markers: ["build.gradle.kts"]
Available LSPs:
◐ kotlin-language-server (kotlin) - initializing...
Configuration can be updated at .kiro/settings/lsp.json
Learn more at https://kiro.dev/docs/cli/code-intelligence/
现在需要等待几分钟,等初始化完成。再次运行/code status命令可查看是否初始化完成。当状态信息从圆饼形状的进度展示变为✅,且显示initialized,就表示可以使用了。
3、执行代码辅助任务
我们以询问找到 Ec2ClientPort 接口的所有实现这个查询为例。返回结果如下:
Searching for symbols matching: "Ec2ClientPort" (using tool: code)
1. Class Ec2ClientPort at src/main/kotlin/com/example/ec2/AwsEc2Client.kt:17:1
- Completed in 0.80s
Finding all references at: src/main/kotlin/com/example/ec2/AwsEc2Client.kt:17:11 (using tool: code)
1. src/main/kotlin/com/example/ec2/AwsEc2Client.kt:25:45 - class AwsEc2ClientAdapter(region: String) : Ec2ClientPort {
2. src/main/kotlin/com/example/ec2/Ec2PowerController.kt:9:46 - class Ec2PowerController(private val client: Ec2ClientPort) {
3. src/test/kotlin/com/example/ec2/Ec2PowerControllerTest.kt:12:38 - private lateinit var mockClient: Ec2ClientPort
4. src/test/kotlin/com/example/ec2/PropertyTests.kt:124:36 - val mockClient = mockk<Ec2ClientPort>()
5. src/test/kotlin/com/example/ec2/PropertyTests.kt:167:36 - val mockClient = mockk<Ec2ClientPort>()
(1 more items found)
- Completed in 0.80s
> Ec2ClientPort 接口的所有实现和使用:
实现类:
- AwsEc2ClientAdapter (src/main/kotlin/com/example/ec2/AwsEc2Client.kt:25) - 唯一的实现类
使用位置:
- Ec2PowerController (src/main/kotlin/com/example/ec2/Ec2PowerController.kt:9) - 构造函数参数
- Ec2PowerControllerTest (src/test/kotlin/com/example/ec2/Ec2PowerControllerTest.kt:12) - 测试中的 mock 对象
- PropertyTests (src/test/kotlin/com/example/ec2/PropertyTests.kt) - 3 处使用 mock 对象
LSP 成功找到了接口的 1 个实现和 5 个引用位置。
另一个例子,可以询问Kiro显示 ec2Client 变量的类型信息。返回结果如下:
I'll use the LSP to get the type information for ec2Client.
Searching for symbols matching: "ec2Client" (using tool: code)
1. Class Ec2ClientPort at src/main/kotlin/com/example/ec2/AwsEc2Client.kt:17:1
2. Class AwsEc2ClientAdapter at src/main/kotlin/com/example/ec2/AwsEc2Client.kt:25:1
- Completed in 0.80s
Going to definition at: src/main/kotlin/com/example/ec2/AwsEc2Client.kt:27:20 (show source) (using tool: code)
No definition found for symbol at src/main/kotlin/com/example/ec2/AwsEc2Client.kt:27:20
- Completed in 0.80s
Getting hover information at: src/main/kotlin/com/example/ec2/AwsEc2Client.kt:27:20 (using tool: code)
Hover Info: kotlin
Ec2Client
- Completed in 0.243s
> 根据 LSP 提供的类型信息:
类型: Ec2Client
这是在 src/main/kotlin/com/example/ec2/AwsEc2Client.kt 第27行定义的 ec2Client 变量的类型,完整类型名为
software.amazon.awssdk.services.ec2.Ec2Client(AWS SDK for Java 2.x 的 EC2 客户端)。
由此表示LSP功能正常。
需要注意的是,如果退出了Kiro CLI,下次新启动Kiro CLI,Language Server需要数秒钟时间在后台启动,建议运行/code status确保Language Server已经启动完成,启动成功的状态是initialized。如果启动没完成,直接询问模型问题,模型会自己阅读代码,而不是使用LSP的能力。
四、参考文档
Kiro CLI - Code Intelligence with Language Server
https://kiro.dev/docs/cli/code-intelligence/#lsp-integration-optional
最后修改于 2026-02-22