@@ -10,78 +10,102 @@ import (
1010 "strings"
1111
1212 "github.com/juliosueiras/terraform-lsp/langserver"
13+ "github.com/spf13/pflag"
14+ "github.com/spf13/viper"
1315)
1416
15- var tcp = flag . Bool ( "tcp" , false , "Use TCP instead of Stdio(which is default)" )
16- var port = flag . Int ( "port" , 9900 , "Port for TCP Server" )
17- var address = flag . String ( "address" , "127.0.0.1" , "Address for TCP Server" )
17+ var Version string
18+ var GitCommit string
19+ var Date string
1820
19- var location = flag .String ("log-location" , "" , "Location of the lsp log" )
20- var locationJRPC2 = flag .String ("log-jrpc2-location" , "" , "Location of the lsp log for jrpc2" )
21+ func init () {
22+ flag .Bool ("tcp" , false , "Use TCP instead of Stdio(which is default)" )
23+ flag .Int ("port" , 9900 , "Port for TCP Server" )
24+ flag .String ("address" , "127.0.0.1" , "Address for TCP Server" )
2125
22- var debug = flag .Bool ( "debug " , false , "Enable debug output " )
23- var debugJRPC2 = flag .Bool ( "debug -jrpc2" , false , "Enable debug output for jrpc2" )
26+ flag .String ( "log-location " , "" , "Location of the lsp log " )
27+ flag .String ( "log -jrpc2-location " , "" , "Location of the lsp log for jrpc2" )
2428
25- var enableLogFile = flag .Bool ("enable-log-file " , false , "Enable log file " )
26- var enableLogFileJRPC2 = flag .Bool ("enable-log- jrpc2-file " , false , "Enable log file for JRPC2 " )
29+ flag .Bool ("debug " , false , "Enable debug output " )
30+ flag .Bool ("debug- jrpc2" , false , "Enable debug output for jrpc2 " )
2731
28- var Version string
29- var GitCommit string
30- var Date string
32+ flag .Bool ("enable-log-file" , false , "Enable log file" )
33+ flag .Bool ("enable-log-jrpc2-file" , false , "Enable log file for JRPC2" )
34+
35+ flag .Bool ("version" , false , "Show version" )
3136
32- var version = flag .Bool ("version" , false , "Show version" )
37+ // Load config from file
38+ configViper ()
39+ }
3340
3441func main () {
35- flag .Parse ()
3642
3743 oldLog .SetOutput (ioutil .Discard )
3844 oldLog .SetFlags (0 )
3945
40- if * version {
41- fmt .Printf ("v%s, commit: %s, build on: %s" , strings .Trim (Version , "v" ), GitCommit , Date )
46+ version := viper .GetBool ("version" )
47+ if version {
48+ fmt .Printf ("v%s, commit: %s, build on: %s\n " , strings .Trim (Version , "v" ), GitCommit , Date )
4249 return
4350 }
4451
45- log .Infof ("Log Level is Debug: %t" , * debug )
52+ debug := viper .GetBool ("debug" )
53+ log .Infof ("Log Level is Debug: %t" , debug )
4654
47- if * debug {
55+ if debug {
4856 log .SetLevel (log .DebugLevel )
4957 } else {
5058 log .SetLevel (log .InfoLevel )
5159 }
5260
53- if * enableLogFile {
54- f , err := os .OpenFile (fmt .Sprintf ("%stf-lsp.log" , * location ), os .O_RDWR | os .O_CREATE | os .O_APPEND , 0666 )
61+ enableLogFile := viper .GetBool ("enable-log-file" )
62+ if enableLogFile {
63+ location := viper .GetString ("log-location" )
64+ f , err := os .OpenFile (fmt .Sprintf ("%stf-lsp.log" , location ), os .O_RDWR | os .O_CREATE | os .O_APPEND , 0666 )
5565 if err != nil {
5666 log .Fatalf ("error opening file: %v" , err )
5767 }
5868 defer f .Close ()
5969 log .SetOutput (f )
6070 }
6171
62- var oldLogInstance * oldLog.Logger
63-
64- if * debugJRPC2 {
65- if ! * tcp && ! * enableLogFileJRPC2 {
66- log .Fatal ("Debug for JRPC2 has to be set for log file location if is set to use stdio" )
67- }
68-
69- oldLogInstance = oldLog .New (os .Stdout , "" , 0 )
70- if * enableLogFileJRPC2 {
71- f , err := os .OpenFile (fmt .Sprintf ("%stf-lsp-jrpc2.log" , * locationJRPC2 ), os .O_RDWR | os .O_CREATE | os .O_APPEND , 0666 )
72- if err != nil {
73- log .Fatalf ("error opening file: %v" , err )
74- }
75- defer f .Close ()
76- oldLogInstance .SetOutput (f )
77- }
72+ var oldLogInstance * oldLog.Logger
73+
74+ debugJRPC2 := viper .GetBool ("debug-jrpc2" )
75+ tcp := viper .GetBool ("tcp" )
76+ enableLogFileJRPC2 := viper .GetBool ("enable-log-jrpc2-file" )
77+
78+ if debugJRPC2 {
79+ if ! tcp && ! enableLogFileJRPC2 {
80+ log .Fatal ("Debug for JRPC2 has to be set for log file location if is set to use stdio" )
81+ }
82+
83+ oldLogInstance = oldLog .New (os .Stdout , "" , 0 )
84+ if enableLogFileJRPC2 {
85+ locationJRPC2 := viper .GetString ("log-jrpc2-location" )
86+ f , err := os .OpenFile (fmt .Sprintf ("%stf-lsp-jrpc2.log" , locationJRPC2 ), os .O_RDWR | os .O_CREATE | os .O_APPEND , 0666 )
87+ if err != nil {
88+ log .Fatalf ("error opening file: %v" , err )
89+ }
90+ defer f .Close ()
91+ oldLogInstance .SetOutput (f )
92+ }
7893 }
7994
80- langserver .InitializeServiceMap ()
95+ langserver .InitializeServiceMap ()
8196
82- if * tcp {
83- langserver .RunTCPServer (* address , * port , oldLogInstance )
97+ if tcp {
98+ address := viper .GetString ("address" )
99+ port := viper .GetInt ("port" )
100+ langserver .RunTCPServer (address , port , oldLogInstance )
84101 } else {
85102 langserver .RunStdioServer (oldLogInstance )
86103 }
87104}
105+
106+ func configViper () {
107+ // Accept CLI arguments
108+ pflag .CommandLine .AddGoFlagSet (flag .CommandLine )
109+ flag .Parse ()
110+ viper .BindPFlags (pflag .CommandLine )
111+ }
0 commit comments