Skip to content

Commit 10357f9

Browse files
committed
Initial test patch that addresses the issue of the language server being
incompatible with arduino-cli version 1.0.0 Also added some experimental code gives clangd the correct system headers fixing the diganostic include and missing decleration errors that are seen on the official version.
1 parent 9c2f44d commit 10357f9

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

ls/ls.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,12 @@ func NewINOLanguageServer(stdin io.Reader, stdout io.Writer, config *Config) *IN
163163
logger.Logf("Initial board configuration: %s", ls.config.Fqbn)
164164
logger.Logf("%s", globals.VersionInfo.String())
165165
logger.Logf("Language server temp directory: %s", ls.tempDir)
166+
logger.Logf("### Language server temp directory: %s", ls.tempDir.String())
166167
logger.Logf("Language server build path: %s", ls.buildPath)
167168
logger.Logf("Language server build sketch root: %s", ls.buildSketchRoot)
168169
logger.Logf("Language server FULL build path: %s", ls.fullBuildPath)
170+
//os.Link("compile_flags.txt", ls.buildPath.Join("compile_flags.txt").String())
171+
//logger.Logf("### Writing to: %s", ls.buildPath.Join("compile_flags.txt").String())
169172

170173
ls.IDE = NewIDELSPServer(logger, stdin, stdout, ls)
171174
ls.progressHandler = newProgressProxy(ls.IDE.conn)
@@ -203,6 +206,8 @@ func (ls *INOLanguageServer) initializeReqFromIDE(ctx context.Context, logger js
203206
return
204207
}
205208

209+
//logger.Logf("###Environment donw",)
210+
206211
if inoCppContent, err := ls.buildSketchCpp.ReadFile(); err == nil {
207212
ls.sketchMapper = sourcemapper.CreateInoMapper(inoCppContent)
208213
ls.sketchMapper.CppText.Version = 1
@@ -211,12 +216,15 @@ func (ls *INOLanguageServer) initializeReqFromIDE(ctx context.Context, logger js
211216
return
212217
}
213218

219+
//logger.Logf("### Readfile ",)
220+
214221
// Retrieve data folder
215222
dataFolder, err := ls.extractDataFolderFromArduinoCLI(logger)
216223
if err != nil {
217-
logger.Logf("error retrieving data folder from arduino-cli: %s", err)
224+
//logger.Logf("### error retrieving data folder from arduino-cli: ")
218225
return
219226
}
227+
//logger.Logf("###Extracted data folder from arduino ",)
220228

221229
// Start clangd
222230
ls.Clangd = newClangdLSPClient(logger, dataFolder, ls)
@@ -226,6 +234,7 @@ func (ls *INOLanguageServer) initializeReqFromIDE(ctx context.Context, logger js
226234
logger.Logf("Lost connection with clangd!")
227235
ls.Close()
228236
}()
237+
//logger.Logf("###Client created ",)
229238

230239
// Send initialization command to clangd (1 sec. timeout)
231240
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
@@ -1462,7 +1471,7 @@ func (ls *INOLanguageServer) extractDataFolderFromArduinoCLI(logger jsonrpc.Func
14621471
}
14631472
cmdOutput := &bytes.Buffer{}
14641473
cmd.RedirectStdoutTo(cmdOutput)
1465-
logger.Logf("running: %s", strings.Join(args, " "))
1474+
//logger.Logf("### running: %s", strings.Join(args, " "))
14661475
if err := cmd.Run(); err != nil {
14671476
return nil, errors.Errorf("running %s: %s", strings.Join(args, " "), err)
14681477
}
@@ -1473,15 +1482,18 @@ func (ls *INOLanguageServer) extractDataFolderFromArduinoCLI(logger jsonrpc.Func
14731482
} `json:"directories"`
14741483
}
14751484
var res cmdRes
1485+
//logger.Logf("### parsing -> %s", cmdOutput.String())
14761486
if err := json.Unmarshal(cmdOutput.Bytes(), &res); err != nil {
1487+
//logger.Logf("### parser errors -> %s", dataDir)
14771488
return nil, errors.Errorf("parsing arduino-cli output: %s", err)
14781489
}
14791490
// Return only the build path
14801491
logger.Logf("Arduino Data Dir -> %s", res.Directories.Data)
14811492
dataDir = res.Directories.Data
14821493
}
14831494

1484-
dataDirPath := paths.New(dataDir)
1495+
dataDirPath := paths.New("/tmp/wow")
1496+
//logger.Logf("### return home -> %s", dataDir)
14851497
return dataDirPath.Canonical(), nil
14861498
}
14871499

ls/lsp_client_clangd.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,19 @@ func newClangdLSPClient(logger jsonrpc.FunctionLogger, dataFolder *paths.Path, l
4242
clangdConf := fmt.Sprintln("Diagnostics:")
4343
clangdConf += fmt.Sprintln(" Suppress: [anon_bitfield_qualifiers]")
4444
clangdConf += fmt.Sprintln("CompileFlags:")
45-
clangdConf += fmt.Sprintln(" Add: -ferror-limit=0")
45+
//clangdConf += fmt.Sprintln(" Add: -ferror-limit=0")
46+
clangdConf += fmt.Sprintln(" Add: [")
47+
clangdConf += fmt.Sprintln(" -ferror-limit=0,")
48+
//clangdConf += fmt.Sprintln(" -DARDUINO=186,")
49+
//clangdConf += fmt.Sprintln(" -DUSBCON=1,")
50+
clangdConf += fmt.Sprintln(" -nostdlib,")
51+
clangdConf += fmt.Sprintln(" -nostdinc,")
52+
clangdConf += fmt.Sprintln(" -isystem=/home/pi/test/build/sketch/tmp/wow/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/,")
53+
clangdConf += fmt.Sprintln(" -I/home/pi/test/tmp/wow/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/,")
54+
clangdConf += fmt.Sprintln(" -F/home/pi/test/tmp/wow/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/include/,")
55+
clangdConf += fmt.Sprintln(" -I/home/pi/test/tmp/wow/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/lib/gcc/avr/7.3.0/include/,")
56+
clangdConf += fmt.Sprintln(" -F/home/pi/test/tmp/wow/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/lib/gcc/avr/7.3.0/include/")
57+
clangdConf += fmt.Sprintln(" ]")
4658
if err := clangdConfFile.WriteFile([]byte(clangdConf)); err != nil {
4759
logger.Logf("Error writing clangd configuration: %s", err)
4860
}
@@ -52,6 +64,8 @@ func newClangdLSPClient(logger jsonrpc.FunctionLogger, dataFolder *paths.Path, l
5264
ls.config.ClangdPath.String(),
5365
"-log=verbose",
5466
"--pch-storage=memory",
67+
//"--enable-config",
68+
//"--suggest-missing-includes",
5569
fmt.Sprintf(`--compile-commands-dir=%s`, ls.buildPath),
5670
}
5771
if jobs := ls.config.Jobs; jobs == -1 {
@@ -65,6 +79,7 @@ func newClangdLSPClient(logger jsonrpc.FunctionLogger, dataFolder *paths.Path, l
6579
if dataFolder != nil {
6680
args = append(args, fmt.Sprintf("-query-driver=%s", dataFolder.Join("packages", "**").Canonical()))
6781
}
82+
args = append(args, fmt.Sprintf("--function-arg-placeholders=0"))
6883

6984
logger.Logf(" Starting clangd: %s", strings.Join(args, " "))
7085
var clangdStdin io.WriteCloser

0 commit comments

Comments
 (0)