in internal/cmd/serve_command.go [54:121]
func (c *ServeCommand) Run(args []string) int {
// #nosec G304
f := c.flags()
if err := f.Parse(args); err != nil {
c.Ui.Error(fmt.Sprintf("Error parsing command-line flags: %s", err))
return 1
}
if c.cpuProfile != "" {
stop, err := writeCpuProfileInto(c.cpuProfile)
defer stop() //nolint
if err != nil {
c.Ui.Error(err.Error())
return 1
}
}
if c.memProfile != "" {
defer writeMemoryProfileInto(c.memProfile) //nolint
}
var logger *log.Logger
if c.logFilePath != "" {
fl, err := logging.NewFileLogger(c.logFilePath)
if err != nil {
c.Ui.Error(fmt.Sprintf("Failed to setup file logging: %s", err))
return 1
}
defer fl.Close()
logger = fl.Logger()
} else {
logger = logging.NewLogger(os.Stderr)
}
ctx, cancelFunc := lsctx.WithSignalCancel(context.Background(), logger,
syscall.SIGINT, syscall.SIGTERM)
defer cancelFunc()
if c.reqConcurrency != 0 {
ctx = langserver.WithRequestConcurrency(ctx, c.reqConcurrency)
logger.Printf("Custom request concurrency set to %d", c.reqConcurrency)
}
logger.Printf("Starting azapi-lsp %s", c.Version)
ctx = lsctx.WithLanguageServerVersion(ctx, c.Version)
srv := langserver.NewLangServer(ctx, handlers.NewSession)
srv.SetLogger(logger)
if c.port != 0 {
err := srv.StartTCP(fmt.Sprintf("localhost:%d", c.port))
if err != nil {
c.Ui.Error(fmt.Sprintf("Failed to start TCP server: %s", err))
return 1
}
return 0
}
err := srv.StartAndWait(os.Stdin, os.Stdout)
if err != nil {
c.Ui.Error(fmt.Sprintf("Failed to start server: %s", err))
return 1
}
return 0
}