Skip to content

Commit 23a0f04

Browse files
authored
Merge pull request #118 from arduino/speed_improvements
Some tweaks on how sketch is rebuild during editing
2 parents 0384c34 + f9eafe3 commit 23a0f04

File tree

6 files changed

+124
-66
lines changed

6 files changed

+124
-66
lines changed

Diff for: go.mod

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ module github.com/arduino/arduino-language-server
33
go 1.18
44

55
require (
6-
github.com/arduino/arduino-cli v0.0.0-20220614161710-813cfe73a466
6+
github.com/arduino/arduino-cli v0.0.0-20220711135540-a5466d017f77
77
github.com/arduino/go-paths-helper v1.7.0
88
github.com/fatih/color v1.13.0
99
github.com/mattn/go-isatty v0.0.14
1010
github.com/pkg/errors v0.9.1
1111
github.com/stretchr/testify v1.7.0
1212
go.bug.st/json v1.15.6
13-
go.bug.st/lsp v0.0.0-20220608135618-8a2f8eb9ad1b
13+
go.bug.st/lsp v0.0.0-20220701124835-c1977441be8c
1414
google.golang.org/grpc v1.42.0
1515
)
1616

@@ -19,6 +19,8 @@ require (
1919
github.com/arduino/go-win32-utils v0.0.0-20180330194947-ed041402e83b // indirect
2020
github.com/codeclysm/extract/v3 v3.0.2 // indirect
2121
github.com/davecgh/go-spew v1.1.1 // indirect
22+
github.com/djherbis/buffer v1.1.0 // indirect
23+
github.com/djherbis/nio/v3 v3.0.1 // indirect
2224
github.com/fsnotify/fsnotify v1.4.9 // indirect
2325
github.com/golang/protobuf v1.5.2 // indirect
2426
github.com/h2non/filetype v1.0.8 // indirect

Diff for: go.sum

+8-4
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7
4040
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
4141
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
4242
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
43-
github.com/arduino/arduino-cli v0.0.0-20220614161710-813cfe73a466 h1:YWiioO3yTEEaat8ynHb9OiL3/VQkNV1N0PBAUrogpzM=
44-
github.com/arduino/arduino-cli v0.0.0-20220614161710-813cfe73a466/go.mod h1:lKz95Yubl2TUVHzRlbL08gVUH6gtZ4g2f/WlFTZAKVQ=
43+
github.com/arduino/arduino-cli v0.0.0-20220711135540-a5466d017f77 h1:FEq5nyTsXVfxv2/3OScDms8JY40HATSoY/ZETbm6UvQ=
44+
github.com/arduino/arduino-cli v0.0.0-20220711135540-a5466d017f77/go.mod h1:fmDzZyIZDYjR/FTdI1dKts/FW9LBoCestPKPP5k4YMI=
4545
github.com/arduino/go-paths-helper v1.0.1/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck=
4646
github.com/arduino/go-paths-helper v1.2.0/go.mod h1:HpxtKph+g238EJHq4geEPv9p+gl3v5YYu35Yb+w31Ck=
4747
github.com/arduino/go-paths-helper v1.6.1/go.mod h1:V82BWgAAp4IbmlybxQdk9Bpkz8M4Qyx+RAFKaG9NuvU=
@@ -77,6 +77,10 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsr
7777
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
7878
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
7979
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
80+
github.com/djherbis/buffer v1.1.0 h1:uGQ+DZDAMlfC2z3khbBtLcAHC0wyoNrX9lpOml3g3fg=
81+
github.com/djherbis/buffer v1.1.0/go.mod h1:VwN8VdFkMY0DCALdY8o00d3IZ6Amz/UNVMWcSaJT44o=
82+
github.com/djherbis/nio/v3 v3.0.1 h1:6wxhnuppteMa6RHA4L81Dq7ThkZH8SwnDzXDYy95vB4=
83+
github.com/djherbis/nio/v3 v3.0.1/go.mod h1:Ng4h80pbZFMla1yKzm61cF0tqqilXZYrogmWgZxOcmg=
8084
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
8185
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
8286
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
@@ -300,8 +304,8 @@ go.bug.st/downloader/v2 v2.1.1 h1:nyqbUizo3E2IxCCm4YFac4FtSqqFpqWP+Aae5GCMuw4=
300304
go.bug.st/downloader/v2 v2.1.1/go.mod h1:VZW2V1iGKV8rJL2ZEGIDzzBeKowYv34AedJz13RzVII=
301305
go.bug.st/json v1.15.6 h1:pvSpotu6f5JoCbx1TnKn6asVH7o9Tg2/GKsZSVzBOsc=
302306
go.bug.st/json v1.15.6/go.mod h1:bh58F9adz5ePlNqtvbuXuXcf9k6IrDLKH6lJUsHP3TI=
303-
go.bug.st/lsp v0.0.0-20220608135618-8a2f8eb9ad1b h1:JkRunYlYDXFIgMf3BfgFrQyvHCsqkUuCGL9CUYhY3zc=
304-
go.bug.st/lsp v0.0.0-20220608135618-8a2f8eb9ad1b/go.mod h1:oYTh1uf5hI1teV5crrWut41Pk8vD/NqIjs4zD+No5FE=
307+
go.bug.st/lsp v0.0.0-20220701124835-c1977441be8c h1:rdebuzKpFl6eLKoqOiKV7C0frI4LlpQbJ+48caNvchA=
308+
go.bug.st/lsp v0.0.0-20220701124835-c1977441be8c/go.mod h1:oYTh1uf5hI1teV5crrWut41Pk8vD/NqIjs4zD+No5FE=
305309
go.bug.st/relaxed-semver v0.9.0 h1:qt0T8W70VCurvsbxRK25fQwiTOFjkzwC/fDOpyPnchQ=
306310
go.bug.st/relaxed-semver v0.9.0/go.mod h1:ug0/W/RPYUjliE70Ghxg77RDHmPxqpo7SHV16ijss7Q=
307311
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=

Diff for: ls/builder.go

+26-16
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func (r *SketchRebuilder) rebuilderLoop() {
9292
r.cancel = cancel
9393
r.mutex.Unlock()
9494

95-
if err := r.doRebuild(ctx, logger); err != nil {
95+
if err := r.doRebuildArduinoPreprocessedSketch(ctx, logger); err != nil {
9696
logger.Logf("Error: %s", err)
9797
}
9898

@@ -104,10 +104,9 @@ func (r *SketchRebuilder) rebuilderLoop() {
104104
}
105105
}
106106

107-
func (r *SketchRebuilder) doRebuild(ctx context.Context, logger jsonrpc.FunctionLogger) error {
107+
func (r *SketchRebuilder) doRebuildArduinoPreprocessedSketch(ctx context.Context, logger jsonrpc.FunctionLogger) error {
108108
ls := r.ls
109-
110-
if success, err := ls.generateBuildEnvironment(ctx, logger); err != nil {
109+
if success, err := ls.generateBuildEnvironment(ctx, !r.ls.config.SkipLibrariesDiscoveryOnRebuild, logger); err != nil {
111110
return err
112111
} else if !success {
113112
return fmt.Errorf("build failed")
@@ -123,14 +122,10 @@ func (r *SketchRebuilder) doRebuild(ctx context.Context, logger jsonrpc.Function
123122
default:
124123
}
125124

126-
if err := ls.buildPath.Join("compile_commands.json").CopyTo(ls.compileCommandsDir.Join("compile_commands.json")); err != nil {
127-
logger.Logf("ERROR: updating compile_commands: %s", err)
128-
}
129-
130125
if cppContent, err := ls.buildSketchCpp.ReadFile(); err == nil {
131-
oldVesrion := ls.sketchMapper.CppText.Version
126+
oldVersion := ls.sketchMapper.CppText.Version
132127
ls.sketchMapper = sourcemapper.CreateInoMapper(cppContent)
133-
ls.sketchMapper.CppText.Version = oldVesrion + 1
128+
ls.sketchMapper.CppText.Version = oldVersion + 1
134129
ls.sketchMapper.DebugLogAll()
135130
} else {
136131
return errors.WithMessage(err, "reading generated cpp file from sketch")
@@ -143,7 +138,7 @@ func (r *SketchRebuilder) doRebuild(ctx context.Context, logger jsonrpc.Function
143138
TextDocument: lsp.TextDocumentIdentifier{URI: cppURI},
144139
}
145140
if err := ls.Clangd.conn.TextDocumentDidSave(didSaveParams); err != nil {
146-
logger.Logf("error reinitilizing clangd:", err)
141+
logger.Logf("error reinitializing clangd:", err)
147142
return err
148143
}
149144

@@ -159,18 +154,24 @@ func (r *SketchRebuilder) doRebuild(ctx context.Context, logger jsonrpc.Function
159154
},
160155
}
161156
if err := ls.Clangd.conn.TextDocumentDidChange(didChangeParams); err != nil {
162-
logger.Logf("error reinitilizing clangd:", err)
157+
logger.Logf("error reinitializing clangd:", err)
163158
return err
164159
}
165160

166161
return nil
167162
}
168163

169-
func (ls *INOLanguageServer) generateBuildEnvironment(ctx context.Context, logger jsonrpc.FunctionLogger) (bool, error) {
164+
func (ls *INOLanguageServer) generateBuildEnvironment(ctx context.Context, fullBuild bool, logger jsonrpc.FunctionLogger) (bool, error) {
165+
var buildPath *paths.Path
166+
if fullBuild {
167+
buildPath = ls.fullBuildPath
168+
} else {
169+
buildPath = ls.buildPath
170+
}
171+
170172
// Extract all build information from language server status
171173
ls.readLock(logger, false)
172174
sketchRoot := ls.sketchRoot
173-
buildPath := ls.buildPath
174175
config := ls.config
175176
type overridesFile struct {
176177
Overrides map[string]string `json:"overrides"`
@@ -204,6 +205,7 @@ func (ls *INOLanguageServer) generateBuildEnvironment(ctx context.Context, logge
204205
BuildPath: buildPath.String(),
205206
CreateCompilationDatabaseOnly: true,
206207
Verbose: true,
208+
SkipLibrariesDiscovery: !fullBuild,
207209
}
208210
compileReqJson, _ := json.MarshalIndent(compileReq, "", " ")
209211
logger.Logf("Running build with: %s", string(compileReqJson))
@@ -264,9 +266,12 @@ func (ls *INOLanguageServer) generateBuildEnvironment(ctx context.Context, logge
264266
"--source-override", overridesJSON.String(),
265267
"--build-path", buildPath.String(),
266268
"--format", "json",
267-
//"--clean",
268-
sketchRoot.String(),
269269
}
270+
if !fullBuild {
271+
args = append(args, "--skip-libraries-discovery")
272+
}
273+
args = append(args, sketchRoot.String())
274+
270275
cmd, err := executils.NewProcess(nil, args...)
271276
if err != nil {
272277
return false, errors.Errorf("running %s: %s", strings.Join(args, " "), err)
@@ -298,6 +303,11 @@ func (ls *INOLanguageServer) generateBuildEnvironment(ctx context.Context, logge
298303
success = res.Success
299304
}
300305

306+
if fullBuild {
307+
ls.CopyFullBuildResults(logger, buildPath)
308+
return ls.generateBuildEnvironment(ctx, false, logger)
309+
}
310+
301311
// TODO: do canonicalization directly in `arduino-cli`
302312
canonicalizeCompileCommandsJSON(buildPath.Join("compile_commands.json"))
303313

0 commit comments

Comments
 (0)