Skip to content

Commit 3b7271a

Browse files
committed
When new files are added to the sketch do a complete build to synchronize all files
1 parent 277add1 commit 3b7271a

File tree

2 files changed

+29
-13
lines changed

2 files changed

+29
-13
lines changed

Diff for: ls/builder.go

+17-6
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,14 @@ import (
2727

2828
type SketchRebuilder struct {
2929
ls *INOLanguageServer
30-
trigger chan bool
30+
trigger chan chan<- bool
3131
cancel func()
3232
mutex sync.Mutex
3333
}
3434

3535
func NewSketchBuilder(ls *INOLanguageServer) *SketchRebuilder {
3636
res := &SketchRebuilder{
37-
trigger: make(chan bool, 1),
37+
trigger: make(chan chan<- bool, 1),
3838
cancel: func() {},
3939
ls: ls,
4040
}
@@ -45,25 +45,33 @@ func NewSketchBuilder(ls *INOLanguageServer) *SketchRebuilder {
4545
return res
4646
}
4747

48+
func (ls *INOLanguageServer) triggerRebuildAndWait(logger jsonrpc.FunctionLogger) {
49+
completed := make(chan bool)
50+
ls.sketchRebuilder.TriggerRebuild(completed)
51+
ls.writeUnlock(logger)
52+
<-completed
53+
ls.writeLock(logger, true)
54+
}
55+
4856
func (ls *INOLanguageServer) triggerRebuild() {
49-
ls.sketchRebuilder.TriggerRebuild()
57+
ls.sketchRebuilder.TriggerRebuild(nil)
5058
}
5159

52-
func (r *SketchRebuilder) TriggerRebuild() {
60+
func (r *SketchRebuilder) TriggerRebuild(completed chan<- bool) {
5361
r.mutex.Lock()
5462
defer r.mutex.Unlock()
5563

5664
r.cancel() // Stop possibly already running builds
5765
select {
58-
case r.trigger <- true:
66+
case r.trigger <- completed:
5967
default:
6068
}
6169
}
6270

6371
func (r *SketchRebuilder) rebuilderLoop() {
6472
logger := NewLSPFunctionLogger(color.HiMagentaString, "SKETCH REBUILD: ")
6573
for {
66-
<-r.trigger
74+
completed := <-r.trigger
6775

6876
for {
6977
// Concede a 200ms delay to accumulate bursts of changes
@@ -90,6 +98,9 @@ func (r *SketchRebuilder) rebuilderLoop() {
9098

9199
cancel()
92100
r.ls.progressHandler.End("arduinoLanguageServerRebuild", &lsp.WorkDoneProgressEnd{Message: "done"})
101+
if completed != nil {
102+
close(completed)
103+
}
93104
}
94105
}
95106

Diff for: ls/ls.go

+12-7
Original file line numberDiff line numberDiff line change
@@ -961,10 +961,20 @@ func (ls *INOLanguageServer) TextDocumentDidOpenNotifFromIDE(logger jsonrpc.Func
961961
ls.writeLock(logger, true)
962962
defer ls.writeUnlock(logger)
963963

964-
ls.triggerRebuild()
964+
ideTextDocItem := ideParam.TextDocument
965+
clangURI, _, err := ls.ide2ClangDocumentURI(logger, ideTextDocItem.URI)
966+
if err != nil {
967+
logger.Logf("Error: %s", err)
968+
return
969+
}
970+
971+
if ls.ideURIIsPartOfTheSketch(ideTextDocItem.URI) {
972+
if !clangURI.AsPath().Exist() {
973+
ls.triggerRebuildAndWait(logger)
974+
}
975+
}
965976

966977
// Add the TextDocumentItem in the tracked files list
967-
ideTextDocItem := ideParam.TextDocument
968978
ls.trackedIdeDocs[ideTextDocItem.URI.AsPath().String()] = ideTextDocItem
969979

970980
// If we are tracking a .ino...
@@ -979,11 +989,6 @@ func (ls *INOLanguageServer) TextDocumentDidOpenNotifFromIDE(logger jsonrpc.Func
979989
}
980990
}
981991

982-
clangURI, _, err := ls.ide2ClangDocumentURI(logger, ideTextDocItem.URI)
983-
if err != nil {
984-
logger.Logf("Error: %s", err)
985-
return
986-
}
987992
clangTextDocItem := lsp.TextDocumentItem{
988993
URI: clangURI,
989994
}

0 commit comments

Comments
 (0)