github.com/nevalang/neva@v0.23.1-0.20240507185603-7696a9bb8dda/cmd/lsp/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 6 "github.com/tliron/commonlog" 7 _ "github.com/tliron/commonlog/simple" 8 "github.com/tliron/glsp/server" 9 10 "github.com/nevalang/neva/cmd/lsp/indexer" 11 lspServer "github.com/nevalang/neva/cmd/lsp/server" 12 builder "github.com/nevalang/neva/internal/builder" 13 "github.com/nevalang/neva/internal/compiler/analyzer" 14 "github.com/nevalang/neva/internal/compiler/desugarer" 15 "github.com/nevalang/neva/internal/compiler/parser" 16 "github.com/nevalang/neva/internal/compiler/sourcecode/typesystem" 17 "github.com/nevalang/neva/pkg" 18 ) 19 20 func main() { 21 const serverName = "neva" 22 23 isDebug := flag.Bool("debug", false, "-debug") 24 flag.Parse() 25 26 verbosity := 1 27 if *isDebug { 28 verbosity = 2 29 } 30 31 commonlog.Configure(verbosity, nil) 32 logger := commonlog.GetLoggerf("%s.server", serverName) 33 34 p := parser.New(*isDebug) 35 36 terminator := typesystem.Terminator{} 37 checker := typesystem.MustNewSubtypeChecker(terminator) 38 resolver := typesystem.MustNewResolver(typesystem.Validator{}, checker, terminator) 39 builder := builder.MustNew(p) 40 41 indexer := indexer.New( 42 builder, 43 p, 44 desugarer.New(), 45 analyzer.MustNew(pkg.Version, resolver), 46 ) 47 48 handler := lspServer.BuildHandler(logger, serverName, indexer) 49 50 srv := server.NewServer( 51 handler, 52 serverName, 53 *isDebug, 54 ) 55 56 if err := srv.RunStdio(); err != nil { 57 panic(err) 58 } 59 }