Skip to content

Commit 84fc413

Browse files
authored
Expose golang fqbn package for public use (#2768)
* Made FQBN parsing package public Because it may turn out useful for other projects. * 100% test coverage * Precompile validation regexp * Remove logrus dependency from i18n * Isolate locale-handling functions from i18n interface This changes allows to make a clean i18n package (without dependency on a specific implementation of the translation package) that, in turn, allows to export packages that internally use i18n with the minimal dependency load. * updated doc
1 parent ca446af commit 84fc413

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+296
-215
lines changed

Taskfile.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -309,24 +309,24 @@ tasks:
309309
i18n:update:
310310
desc: Updates i18n files
311311
cmds:
312-
- go run ./internal/i18n/cmd/main.go catalog generate . > ./internal/i18n/data/en.po
312+
- go run ./internal/locales/cmd/main.go catalog generate . > ./internal/locales/data/en.po
313313

314314
i18n:pull:
315315
desc: Pull i18n files from transifex
316316
cmds:
317-
- go run ./internal/i18n/cmd/main.go transifex pull ./internal/i18n/data
317+
- go run ./internal/locales/cmd/main.go transifex pull ./internal/locales/data
318318

319319
i18n:push:
320320
desc: Push i18n files to transifex
321321
cmds:
322-
- go run ./internal/i18n/cmd/main.go transifex push ./internal/i18n/data
322+
- go run ./internal/locales/cmd/main.go transifex push ./internal/locales/data
323323

324324
i18n:check:
325325
desc: Check if the i18n message catalog was updated
326326
cmds:
327327
- task: i18n:pull
328-
- git add -N ./internal/i18n/data
329-
- git diff --exit-code ./internal/i18n/data
328+
- git add -N ./internal/locales/data
329+
- git diff --exit-code ./internal/locales/data
330330

331331
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/check-mkdocs-task/Taskfile.yml
332332
website:check:

commands/instances.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
"github.com/arduino/arduino-cli/internal/arduino/sketch"
3939
"github.com/arduino/arduino-cli/internal/arduino/utils"
4040
"github.com/arduino/arduino-cli/internal/i18n"
41+
"github.com/arduino/arduino-cli/internal/locales"
4142
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
4243
paths "github.com/arduino/go-paths-helper"
4344
"github.com/sirupsen/logrus"
@@ -420,7 +421,7 @@ func (s *arduinoCoreServerImpl) Init(req *rpc.InitRequest, stream rpc.ArduinoCor
420421
// language of the CLI if the locale is different
421422
// after started.
422423
if locale, ok, _ := s.settings.GetStringOk("locale"); ok {
423-
i18n.Init(locale)
424+
locales.Init(locale)
424425
}
425426

426427
return nil

commands/service_board_details.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ import (
2020

2121
"github.com/arduino/arduino-cli/commands/cmderrors"
2222
"github.com/arduino/arduino-cli/commands/internal/instances"
23-
"github.com/arduino/arduino-cli/internal/arduino/cores"
2423
"github.com/arduino/arduino-cli/internal/arduino/utils"
24+
"github.com/arduino/arduino-cli/pkg/fqbn"
2525
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
2626
)
2727

@@ -34,7 +34,7 @@ func (s *arduinoCoreServerImpl) BoardDetails(ctx context.Context, req *rpc.Board
3434
}
3535
defer release()
3636

37-
fqbn, err := cores.ParseFQBN(req.GetFqbn())
37+
fqbn, err := fqbn.Parse(req.GetFqbn())
3838
if err != nil {
3939
return nil, &cmderrors.InvalidFQBNError{Cause: err}
4040
}
@@ -48,7 +48,7 @@ func (s *arduinoCoreServerImpl) BoardDetails(ctx context.Context, req *rpc.Board
4848
details.Name = board.Name()
4949
details.Fqbn = board.FQBN()
5050
details.PropertiesId = board.BoardID
51-
details.Official = fqbn.Package == "arduino"
51+
details.Official = fqbn.Packager == "arduino"
5252
details.Version = board.PlatformRelease.Version.String()
5353
details.IdentificationProperties = []*rpc.BoardIdentificationProperties{}
5454
for _, p := range board.GetIdentificationProperties() {

commands/service_board_list.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ import (
3030
"github.com/arduino/arduino-cli/commands/cmderrors"
3131
"github.com/arduino/arduino-cli/commands/internal/instances"
3232
f "github.com/arduino/arduino-cli/internal/algorithms"
33-
"github.com/arduino/arduino-cli/internal/arduino/cores"
3433
"github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager"
3534
"github.com/arduino/arduino-cli/internal/cli/configuration"
3635
"github.com/arduino/arduino-cli/internal/i18n"
3736
"github.com/arduino/arduino-cli/internal/inventory"
37+
"github.com/arduino/arduino-cli/pkg/fqbn"
3838
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
3939
"github.com/arduino/go-properties-orderedmap"
4040
discovery "github.com/arduino/pluggable-discovery-protocol-handler/v2"
@@ -148,7 +148,7 @@ func identify(pme *packagemanager.Explorer, port *discovery.Port, settings *conf
148148
// first query installed cores through the Package Manager
149149
logrus.Debug("Querying installed cores for board identification...")
150150
for _, board := range pme.IdentifyBoard(port.Properties) {
151-
fqbn, err := cores.ParseFQBN(board.FQBN())
151+
fqbn, err := fqbn.Parse(board.FQBN())
152152
if err != nil {
153153
return nil, &cmderrors.InvalidFQBNError{Cause: err}
154154
}
@@ -210,10 +210,10 @@ func (s *arduinoCoreServerImpl) BoardList(ctx context.Context, req *rpc.BoardLis
210210
}
211211
defer release()
212212

213-
var fqbnFilter *cores.FQBN
213+
var fqbnFilter *fqbn.FQBN
214214
if f := req.GetFqbn(); f != "" {
215215
var err error
216-
fqbnFilter, err = cores.ParseFQBN(f)
216+
fqbnFilter, err = fqbn.Parse(f)
217217
if err != nil {
218218
return nil, &cmderrors.InvalidFQBNError{Cause: err}
219219
}
@@ -247,9 +247,9 @@ func (s *arduinoCoreServerImpl) BoardList(ctx context.Context, req *rpc.BoardLis
247247
}, nil
248248
}
249249

250-
func hasMatchingBoard(b *rpc.DetectedPort, fqbnFilter *cores.FQBN) bool {
250+
func hasMatchingBoard(b *rpc.DetectedPort, fqbnFilter *fqbn.FQBN) bool {
251251
for _, detectedBoard := range b.GetMatchingBoards() {
252-
detectedFqbn, err := cores.ParseFQBN(detectedBoard.GetFqbn())
252+
detectedFqbn, err := fqbn.Parse(detectedBoard.GetFqbn())
253253
if err != nil {
254254
continue
255255
}

commands/service_compile.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ import (
2828
"github.com/arduino/arduino-cli/commands/cmderrors"
2929
"github.com/arduino/arduino-cli/commands/internal/instances"
3030
"github.com/arduino/arduino-cli/internal/arduino/builder"
31-
"github.com/arduino/arduino-cli/internal/arduino/cores"
3231
"github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager"
3332
"github.com/arduino/arduino-cli/internal/arduino/sketch"
3433
"github.com/arduino/arduino-cli/internal/arduino/utils"
3534
"github.com/arduino/arduino-cli/internal/buildcache"
3635
"github.com/arduino/arduino-cli/internal/i18n"
3736
"github.com/arduino/arduino-cli/internal/inventory"
37+
"github.com/arduino/arduino-cli/pkg/fqbn"
3838
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
3939
paths "github.com/arduino/go-paths-helper"
4040
"github.com/sirupsen/logrus"
@@ -116,15 +116,15 @@ func (s *arduinoCoreServerImpl) Compile(req *rpc.CompileRequest, stream rpc.Ardu
116116
return &cmderrors.MissingFQBNError{}
117117
}
118118

119-
fqbn, err := cores.ParseFQBN(fqbnIn)
119+
fqbn, err := fqbn.Parse(fqbnIn)
120120
if err != nil {
121121
return &cmderrors.InvalidFQBNError{Cause: err}
122122
}
123123
_, targetPlatform, targetBoard, boardBuildProperties, buildPlatform, err := pme.ResolveFQBN(fqbn)
124124
if err != nil {
125125
if targetPlatform == nil {
126126
return &cmderrors.PlatformNotFoundError{
127-
Platform: fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch),
127+
Platform: fmt.Sprintf("%s:%s", fqbn.Packager, fqbn.Architecture),
128128
Cause: errors.New(i18n.Tr("platform not installed")),
129129
}
130130
}

commands/service_debug_config.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ import (
2727

2828
"github.com/arduino/arduino-cli/commands/cmderrors"
2929
"github.com/arduino/arduino-cli/commands/internal/instances"
30-
"github.com/arduino/arduino-cli/internal/arduino/cores"
3130
"github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager"
3231
"github.com/arduino/arduino-cli/internal/arduino/sketch"
3332
"github.com/arduino/arduino-cli/internal/i18n"
33+
"github.com/arduino/arduino-cli/pkg/fqbn"
3434
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
3535
"github.com/arduino/go-paths-helper"
3636
"github.com/arduino/go-properties-orderedmap"
@@ -76,7 +76,7 @@ func (s *arduinoCoreServerImpl) IsDebugSupported(ctx context.Context, req *rpc.I
7676

7777
// Compute the minimum FQBN required to get the same debug configuration.
7878
// (i.e. the FQBN cleaned up of the options that do not affect the debugger configuration)
79-
minimumFQBN := cores.MustParseFQBN(req.GetFqbn())
79+
minimumFQBN := fqbn.MustParse(req.GetFqbn())
8080
for _, config := range minimumFQBN.Configs.Keys() {
8181
checkFQBN := minimumFQBN.Clone()
8282
checkFQBN.Configs.Remove(config)
@@ -127,7 +127,7 @@ func (s *arduinoCoreServerImpl) getDebugProperties(req *rpc.GetDebugConfigReques
127127
if fqbnIn == "" {
128128
return nil, &cmderrors.MissingFQBNError{}
129129
}
130-
fqbn, err := cores.ParseFQBN(fqbnIn)
130+
fqbn, err := fqbn.Parse(fqbnIn)
131131
if err != nil {
132132
return nil, &cmderrors.InvalidFQBNError{Cause: err}
133133
}

commands/service_library_list.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ import (
2121

2222
"github.com/arduino/arduino-cli/commands/cmderrors"
2323
"github.com/arduino/arduino-cli/commands/internal/instances"
24-
"github.com/arduino/arduino-cli/internal/arduino/cores"
2524
"github.com/arduino/arduino-cli/internal/arduino/libraries"
2625
"github.com/arduino/arduino-cli/internal/arduino/libraries/librariesindex"
2726
"github.com/arduino/arduino-cli/internal/arduino/libraries/librariesmanager"
2827
"github.com/arduino/arduino-cli/internal/arduino/libraries/librariesresolver"
2928
"github.com/arduino/arduino-cli/internal/i18n"
29+
"github.com/arduino/arduino-cli/pkg/fqbn"
3030
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
3131
)
3232

@@ -59,7 +59,7 @@ func (s *arduinoCoreServerImpl) LibraryList(ctx context.Context, req *rpc.Librar
5959
var allLibs []*installedLib
6060
if fqbnString := req.GetFqbn(); fqbnString != "" {
6161
allLibs = listLibraries(lme, li, req.GetUpdatable(), true)
62-
fqbn, err := cores.ParseFQBN(req.GetFqbn())
62+
fqbn, err := fqbn.Parse(req.GetFqbn())
6363
if err != nil {
6464
return nil, &cmderrors.InvalidFQBNError{Cause: err}
6565
}
@@ -77,8 +77,8 @@ func (s *arduinoCoreServerImpl) LibraryList(ctx context.Context, req *rpc.Librar
7777
}
7878
}
7979
if latest, has := filteredRes[lib.Library.Name]; has {
80-
latestPriority := librariesresolver.ComputePriority(latest.Library, "", fqbn.PlatformArch)
81-
libPriority := librariesresolver.ComputePriority(lib.Library, "", fqbn.PlatformArch)
80+
latestPriority := librariesresolver.ComputePriority(latest.Library, "", fqbn.Architecture)
81+
libPriority := librariesresolver.ComputePriority(lib.Library, "", fqbn.Architecture)
8282
if latestPriority >= libPriority {
8383
// Pick library with the best priority
8484
continue
@@ -87,7 +87,7 @@ func (s *arduinoCoreServerImpl) LibraryList(ctx context.Context, req *rpc.Librar
8787

8888
// Check if library is compatible with board specified by FBQN
8989
lib.Library.CompatibleWith = map[string]bool{
90-
fqbnString: lib.Library.IsCompatibleWith(fqbn.PlatformArch),
90+
fqbnString: lib.Library.IsCompatibleWith(fqbn.Architecture),
9191
}
9292

9393
filteredRes[lib.Library.Name] = lib

commands/service_monitor.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/arduino/arduino-cli/internal/arduino/cores/packagemanager"
2929
pluggableMonitor "github.com/arduino/arduino-cli/internal/arduino/monitor"
3030
"github.com/arduino/arduino-cli/internal/i18n"
31+
"github.com/arduino/arduino-cli/pkg/fqbn"
3132
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
3233
"github.com/arduino/go-properties-orderedmap"
3334
"github.com/djherbis/buffer"
@@ -237,7 +238,7 @@ func (s *arduinoCoreServerImpl) Monitor(stream rpc.ArduinoCoreService_MonitorSer
237238
return nil
238239
}
239240

240-
func findMonitorAndSettingsForProtocolAndBoard(pme *packagemanager.Explorer, protocol, fqbn string) (*pluggableMonitor.PluggableMonitor, *properties.Map, error) {
241+
func findMonitorAndSettingsForProtocolAndBoard(pme *packagemanager.Explorer, protocol, fqbnIn string) (*pluggableMonitor.PluggableMonitor, *properties.Map, error) {
241242
if protocol == "" {
242243
return nil, nil, &cmderrors.MissingPortProtocolError{}
243244
}
@@ -246,8 +247,8 @@ func findMonitorAndSettingsForProtocolAndBoard(pme *packagemanager.Explorer, pro
246247
boardSettings := properties.NewMap()
247248

248249
// If a board is specified search the monitor in the board package first
249-
if fqbn != "" {
250-
fqbn, err := cores.ParseFQBN(fqbn)
250+
if fqbnIn != "" {
251+
fqbn, err := fqbn.Parse(fqbnIn)
251252
if err != nil {
252253
return nil, nil, &cmderrors.InvalidFQBNError{Cause: err}
253254
}

commands/service_upload.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import (
3232
"github.com/arduino/arduino-cli/internal/arduino/globals"
3333
"github.com/arduino/arduino-cli/internal/arduino/sketch"
3434
"github.com/arduino/arduino-cli/internal/i18n"
35+
"github.com/arduino/arduino-cli/pkg/fqbn"
3536
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
3637
paths "github.com/arduino/go-paths-helper"
3738
properties "github.com/arduino/go-properties-orderedmap"
@@ -53,15 +54,15 @@ func (s *arduinoCoreServerImpl) SupportedUserFields(ctx context.Context, req *rp
5354
}
5455
defer release()
5556

56-
fqbn, err := cores.ParseFQBN(req.GetFqbn())
57+
fqbn, err := fqbn.Parse(req.GetFqbn())
5758
if err != nil {
5859
return nil, &cmderrors.InvalidFQBNError{Cause: err}
5960
}
6061

6162
_, platformRelease, _, boardProperties, _, err := pme.ResolveFQBN(fqbn)
6263
if platformRelease == nil {
6364
return nil, &cmderrors.PlatformNotFoundError{
64-
Platform: fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch),
65+
Platform: fmt.Sprintf("%s:%s", fqbn.Packager, fqbn.Architecture),
6566
Cause: err,
6667
}
6768
} else if err != nil {
@@ -282,7 +283,7 @@ func (s *arduinoCoreServerImpl) runProgramAction(ctx context.Context, pme *packa
282283
return nil, &cmderrors.MissingProgrammerError{}
283284
}
284285

285-
fqbn, err := cores.ParseFQBN(fqbnIn)
286+
fqbn, err := fqbn.Parse(fqbnIn)
286287
if err != nil {
287288
return nil, &cmderrors.InvalidFQBNError{Cause: err}
288289
}
@@ -292,7 +293,7 @@ func (s *arduinoCoreServerImpl) runProgramAction(ctx context.Context, pme *packa
292293
_, boardPlatform, board, boardProperties, buildPlatform, err := pme.ResolveFQBN(fqbn)
293294
if boardPlatform == nil {
294295
return nil, &cmderrors.PlatformNotFoundError{
295-
Platform: fmt.Sprintf("%s:%s", fqbn.Package, fqbn.PlatformArch),
296+
Platform: fmt.Sprintf("%s:%s", fqbn.Packager, fqbn.Architecture),
296297
Cause: err,
297298
}
298299
} else if err != nil {

commands/service_upload_list_programmers.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"github.com/arduino/arduino-cli/commands/cmderrors"
2222
"github.com/arduino/arduino-cli/commands/internal/instances"
2323
"github.com/arduino/arduino-cli/internal/arduino/cores"
24+
"github.com/arduino/arduino-cli/pkg/fqbn"
2425
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1"
2526
)
2627

@@ -36,7 +37,7 @@ func (s *arduinoCoreServerImpl) ListProgrammersAvailableForUpload(ctx context.Co
3637
if fqbnIn == "" {
3738
return nil, &cmderrors.MissingFQBNError{}
3839
}
39-
fqbn, err := cores.ParseFQBN(fqbnIn)
40+
fqbn, err := fqbn.Parse(fqbnIn)
4041
if err != nil {
4142
return nil, &cmderrors.InvalidFQBNError{Cause: err}
4243
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy