forked from terraform-linters/tflint
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlangserver.go
53 lines (43 loc) · 1.1 KB
/
langserver.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package cmd
import (
"context"
"fmt"
"log"
"os"
"github.com/sourcegraph/jsonrpc2"
"github.com/terraform-linters/tflint/langserver"
)
func (cli *CLI) startLanguageServer(opts Options) int {
if opts.Chdir != "" {
fmt.Fprintf(cli.errStream, "Cannot use --chdir with --langserver\n")
return ExitCodeError
}
if opts.Recursive {
fmt.Fprintf(cli.errStream, "Cannot use --recursive with --langserver\n")
return ExitCodeError
}
configPath := opts.Config
cliConfig := opts.toConfig()
log.Println("Starting language server...")
handler, plugin, err := langserver.NewHandler(configPath, cliConfig)
if err != nil {
log.Printf("Failed to start language server: %s", err)
return ExitCodeError
}
if plugin != nil {
defer plugin.Clean()
}
ch := registerShutdownCh()
conn := jsonrpc2.NewConn(
context.Background(),
jsonrpc2.NewBufferedStream(langserver.NewConn(os.Stdin, os.Stdout), jsonrpc2.VSCodeObjectCodec{}),
handler,
)
select {
case sig := <-ch:
log.Printf("Received %s, shutting down...\n", sig)
case <-conn.DisconnectNotify():
log.Println("Shutting down...")
}
return ExitCodeOK
}