按产品分类浏览文章 关于本站

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