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  }