diff --git a/cmd/micro/micro.go b/cmd/micro/micro.go index 6d199c8d..7afc8a6d 100644 --- a/cmd/micro/micro.go +++ b/cmd/micro/micro.go @@ -253,6 +253,11 @@ func main() { screen.TermMessage(err) } + err = lsp.Init() + if err != nil { + screen.TermMessage(err) + } + // flag options for k, v := range optionFlags { if *v != "" { diff --git a/internal/lsp/install.go b/internal/lsp/install.go index 49373d8e..c31e3503 100644 --- a/internal/lsp/install.go +++ b/internal/lsp/install.go @@ -3,10 +3,13 @@ package lsp import ( "errors" "io" - "log" + "io/ioutil" + "os" "os/exec" + "path/filepath" "strings" + "github.com/zyedidia/micro/v2/internal/config" "gopkg.in/yaml.v2" ) @@ -32,12 +35,23 @@ func GetLanguage(lang string) (Language, bool) { return Language{}, false } -func init() { +func Init() error { + var servers []byte var err error - conf, err = LoadConfig([]byte(servers)) - if err != nil { - log.Println("[micro-lsp]", err) + + filename := filepath.Join(config.ConfigDir, "lsp.yaml") + if _, e := os.Stat(filename); e == nil { + servers, err = ioutil.ReadFile(filename) + if err != nil { + servers = servers_internal + } + } else { + err = ioutil.WriteFile(filename, servers_internal, 0644) + servers = servers_internal } + + conf, err = LoadConfig(servers) + return err } func LoadConfig(data []byte) (*Config, error) { diff --git a/internal/lsp/servers_yaml.go b/internal/lsp/servers_yaml.go index 0b01276e..0bcbb342 100644 --- a/internal/lsp/servers_yaml.go +++ b/internal/lsp/servers_yaml.go @@ -1,6 +1,6 @@ package lsp -var servers = `language: +var servers_internal = []byte(`language: rust: command: rls install: [["rustup", "update"], ["rustup", "component", "add", "rls", "rust-analysis", "rust-src"]] @@ -64,4 +64,4 @@ var servers = `language: install: [["cargo", "install", "svls"]] d: command: serve-d -` +`)