Skip to content

Commit 16ee92e

Browse files
committed
WIP language server
1 parent 9755088 commit 16ee92e

File tree

3 files changed

+49
-7
lines changed

3 files changed

+49
-7
lines changed

language-server/src/main/kotlin/tools/samt/ls/App.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ import java.io.PrintWriter
88
import java.net.Socket
99

1010

11-
private fun startServer(inStream: InputStream, outStream: OutputStream) {
11+
private fun startServer(inStream: InputStream, outStream: OutputStream, trace: PrintWriter? = null) {
1212
SamtLanguageServer().use { server ->
13-
val launcher = LSPLauncher.createServerLauncher(server, inStream, outStream, false, PrintWriter(System.out))
13+
val launcher = LSPLauncher.createServerLauncher(server, inStream, outStream, false, trace)
1414
val client = launcher.remoteProxy
1515
redirectLogs(client)
1616
server.connect(client)
@@ -32,8 +32,8 @@ fun main(args: Array<String>) {
3232

3333
cliArgs.clientPort?.also { port ->
3434
Socket(cliArgs.clientHost, port).use {
35-
println("Connecting to client at ${it.remoteSocketAddress}:${it.port}")
36-
startServer(it.inputStream, it.outputStream)
35+
println("Connecting to client at ${it.remoteSocketAddress}")
36+
startServer(it.inputStream, it.outputStream, PrintWriter(System.out))
3737
}
3838
return
3939
}

language-server/src/main/kotlin/tools/samt/ls/SamtLanguageServer.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,17 @@ import org.eclipse.lsp4j.*
44
import org.eclipse.lsp4j.services.*
55
import java.io.Closeable
66
import java.util.concurrent.CompletableFuture
7+
import java.util.logging.Logger
78
import kotlin.system.exitProcess
89

910
class SamtLanguageServer : LanguageServer, LanguageClientAware, Closeable {
1011
private lateinit var client: LanguageClient
12+
private val textDocumentService = SamtTextDocumentService()
13+
private val logger = Logger.getLogger("SamtLanguageServer")
1114

1215
override fun initialize(params: InitializeParams): CompletableFuture<InitializeResult> = CompletableFuture.supplyAsync {
1316
val capabilities = ServerCapabilities().apply {
14-
17+
diagnosticProvider = DiagnosticRegistrationOptions(true, false)
1518
}
1619
InitializeResult(capabilities)
1720
}
@@ -22,16 +25,17 @@ class SamtLanguageServer : LanguageServer, LanguageClientAware, Closeable {
2225
exitProcess(0)
2326
}
2427

25-
override fun getTextDocumentService(): TextDocumentService? = null
28+
override fun getTextDocumentService(): TextDocumentService = textDocumentService
2629

2730
override fun getWorkspaceService(): WorkspaceService? = null
2831

2932
override fun connect(client: LanguageClient) {
3033
this.client = client
34+
textDocumentService.connect(client)
35+
logger.info("Connected to client")
3136
}
3237

3338
override fun close() {
3439
shutdown().get()
3540
}
36-
3741
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package tools.samt.ls
2+
3+
import org.eclipse.lsp4j.*
4+
import org.eclipse.lsp4j.services.LanguageClient
5+
import org.eclipse.lsp4j.services.LanguageClientAware
6+
import org.eclipse.lsp4j.services.TextDocumentService
7+
import java.util.concurrent.CompletableFuture
8+
import java.util.logging.Logger
9+
10+
class SamtTextDocumentService : TextDocumentService, LanguageClientAware {
11+
private lateinit var client: LanguageClient
12+
private val logger = Logger.getLogger("SamtTextDocumentService")
13+
14+
override fun didOpen(params: DidOpenTextDocumentParams) {
15+
logger.info("Opened document ${params.textDocument.uri}")
16+
}
17+
18+
override fun didChange(params: DidChangeTextDocumentParams) {
19+
logger.info("Changed document ${params.textDocument.uri}")
20+
}
21+
22+
override fun didClose(params: DidCloseTextDocumentParams) {
23+
logger.info("Closed document ${params.textDocument.uri}")
24+
}
25+
26+
override fun didSave(params: DidSaveTextDocumentParams) {
27+
logger.info("Saved document ${params.textDocument.uri}")
28+
}
29+
30+
override fun diagnostic(params: DocumentDiagnosticParams): CompletableFuture<DocumentDiagnosticReport> = CompletableFuture.supplyAsync {
31+
logger.info("Diagnostics for document ${params.textDocument.uri}")
32+
DocumentDiagnosticReport(RelatedFullDocumentDiagnosticReport())
33+
}
34+
35+
override fun connect(client: LanguageClient) {
36+
this.client = client
37+
}
38+
}

0 commit comments

Comments
 (0)