-
-
Notifications
You must be signed in to change notification settings - Fork 392
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* add completion for `-b` or `--fqbn` for every command * add completion for `-l` or `--protocol` But does only work for connected boards and do not list every protocol installed * the previous implementation was working only with a board connected to the pc RPC was not exposing that functionality * add static completion for `--log-level, `--log-format` and `--format` * add completion for `-P` or `--programmer` & fix typo * add completion for `core uninstall` maybe could be done better (filter and remove the manually installed ones) * add completion for `core install` and `core download` * add completion for `lib uninstall` * add completion for `lib install`, `lib download` * add completion for `lib examples` * add completion for `config add`, `config remove`, `config delete` and `config set` * add completion for `lib deps` * add tests * enhance the completion for `config add` and `config remove` * add description completion suggestion for core, lib, fqbn, programmer * add completion also for `-p` or `--port` flag * remove the `toComplete` parameter from all the completion functions as of now this parameter is useless because if a string is typed in the terminal it cannot be swapped with a different one. For example if I write `arduino-cli compile -b avr<TAB><TAB>` the completion function returns all elements starting with `arduino:avr...`. So the completions are not showed because they cannot be swapped with a string that starts differently. The only shell which seems to support this seems to be zsh * fixes after rebase * update docs * add `-b` or `--fqbn` completion for the monitor command and tests * apply suggestions from code review * fixes after rebase
- Loading branch information
Showing
25 changed files
with
609 additions
and
217 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,190 @@ | ||
package arguments | ||
|
||
import ( | ||
"context" | ||
|
||
"github.com/arduino/arduino-cli/arduino/cores" | ||
"github.com/arduino/arduino-cli/cli/instance" | ||
"github.com/arduino/arduino-cli/commands" | ||
"github.com/arduino/arduino-cli/commands/board" | ||
"github.com/arduino/arduino-cli/commands/core" | ||
"github.com/arduino/arduino-cli/commands/lib" | ||
rpc "github.com/arduino/arduino-cli/rpc/cc/arduino/cli/commands/v1" | ||
) | ||
|
||
// GetInstalledBoards is an helper function useful to autocomplete. | ||
// It returns a list of fqbn | ||
// it's taken from cli/board/listall.go | ||
func GetInstalledBoards() []string { | ||
inst := instance.CreateAndInit() | ||
|
||
list, _ := board.ListAll(context.Background(), &rpc.BoardListAllRequest{ | ||
Instance: inst, | ||
SearchArgs: nil, | ||
IncludeHiddenBoards: false, | ||
}) | ||
var res []string | ||
// transform the data structure for the completion | ||
for _, i := range list.Boards { | ||
res = append(res, i.Fqbn+"\t"+i.Name) | ||
} | ||
return res | ||
} | ||
|
||
// GetInstalledProtocols is an helper function useful to autocomplete. | ||
// It returns a list of protocols available based on the installed boards | ||
func GetInstalledProtocols() []string { | ||
inst := instance.CreateAndInit() | ||
pm := commands.GetPackageManager(inst.Id) | ||
boards := pm.InstalledBoards() | ||
|
||
installedProtocols := make(map[string]struct{}) | ||
for _, board := range boards { | ||
for _, protocol := range board.Properties.SubTree("upload.tool").FirstLevelKeys() { | ||
if protocol == "default" { | ||
// default is used as fallback when trying to upload to a board | ||
// using a protocol not defined for it, it's useless showing it | ||
// in autocompletion | ||
continue | ||
} | ||
installedProtocols[protocol] = struct{}{} | ||
} | ||
} | ||
res := make([]string, len(installedProtocols)) | ||
i := 0 | ||
for k := range installedProtocols { | ||
res[i] = k | ||
i++ | ||
} | ||
return res | ||
} | ||
|
||
// GetInstalledProgrammers is an helper function useful to autocomplete. | ||
// It returns a list of programmers available based on the installed boards | ||
func GetInstalledProgrammers() []string { | ||
inst := instance.CreateAndInit() | ||
pm := commands.GetPackageManager(inst.Id) | ||
|
||
// we need the list of the available fqbn in order to get the list of the programmers | ||
list, _ := board.ListAll(context.Background(), &rpc.BoardListAllRequest{ | ||
Instance: inst, | ||
SearchArgs: nil, | ||
IncludeHiddenBoards: false, | ||
}) | ||
|
||
installedProgrammers := make(map[string]string) | ||
for _, board := range list.Boards { | ||
fqbn, _ := cores.ParseFQBN(board.Fqbn) | ||
_, boardPlatform, _, _, _, _ := pm.ResolveFQBN(fqbn) | ||
for programmerID, programmer := range boardPlatform.Programmers { | ||
installedProgrammers[programmerID] = programmer.Name | ||
} | ||
} | ||
|
||
res := make([]string, len(installedProgrammers)) | ||
i := 0 | ||
for programmerID := range installedProgrammers { | ||
res[i] = programmerID + "\t" + installedProgrammers[programmerID] | ||
i++ | ||
} | ||
return res | ||
} | ||
|
||
// GetUninstallableCores is an helper function useful to autocomplete. | ||
// It returns a list of cores which can be uninstalled | ||
func GetUninstallableCores() []string { | ||
inst := instance.CreateAndInit() | ||
|
||
platforms, _ := core.GetPlatforms(&rpc.PlatformListRequest{ | ||
Instance: inst, | ||
UpdatableOnly: false, | ||
All: false, | ||
}) | ||
var res []string | ||
// transform the data structure for the completion | ||
for _, i := range platforms { | ||
res = append(res, i.Id+"\t"+i.Name) | ||
} | ||
return res | ||
} | ||
|
||
// GetInstallableCores is an helper function useful to autocomplete. | ||
// It returns a list of cores which can be installed/downloaded | ||
func GetInstallableCores() []string { | ||
inst := instance.CreateAndInit() | ||
|
||
platforms, _ := core.PlatformSearch(&rpc.PlatformSearchRequest{ | ||
Instance: inst, | ||
SearchArgs: "", | ||
AllVersions: false, | ||
}) | ||
var res []string | ||
// transform the data structure for the completion | ||
for _, i := range platforms.SearchOutput { | ||
res = append(res, i.Id+"\t"+i.Name) | ||
} | ||
return res | ||
} | ||
|
||
// GetInstalledLibraries is an helper function useful to autocomplete. | ||
// It returns a list of libs which are currently installed, including the builtin ones | ||
func GetInstalledLibraries() []string { | ||
return getLibraries(true) | ||
} | ||
|
||
// GetUninstallableLibraries is an helper function useful to autocomplete. | ||
// It returns a list of libs which can be uninstalled | ||
func GetUninstallableLibraries() []string { | ||
return getLibraries(false) | ||
} | ||
|
||
func getLibraries(all bool) []string { | ||
inst := instance.CreateAndInit() | ||
libs, _ := lib.LibraryList(context.Background(), &rpc.LibraryListRequest{ | ||
Instance: inst, | ||
All: all, | ||
Updatable: false, | ||
Name: "", | ||
Fqbn: "", | ||
}) | ||
var res []string | ||
// transform the data structure for the completion | ||
for _, i := range libs.InstalledLibraries { | ||
res = append(res, i.Library.Name+"\t"+i.Library.Sentence) | ||
} | ||
return res | ||
} | ||
|
||
// GetInstallableLibs is an helper function useful to autocomplete. | ||
// It returns a list of libs which can be installed/downloaded | ||
func GetInstallableLibs() []string { | ||
inst := instance.CreateAndInit() | ||
|
||
libs, _ := lib.LibrarySearch(context.Background(), &rpc.LibrarySearchRequest{ | ||
Instance: inst, | ||
Query: "", // if no query is specified all the libs are returned | ||
}) | ||
var res []string | ||
// transform the data structure for the completion | ||
for _, i := range libs.Libraries { | ||
res = append(res, i.Name+"\t"+i.Latest.Sentence) | ||
} | ||
return res | ||
} | ||
|
||
// GetConnectedBoards is an helper function useful to autocomplete. | ||
// It returns a list of boards which are currently connected | ||
// Obviously it does not suggests network ports because of the timeout | ||
func GetConnectedBoards() []string { | ||
inst := instance.CreateAndInit() | ||
|
||
list, _ := board.List(&rpc.BoardListRequest{ | ||
Instance: inst, | ||
}) | ||
var res []string | ||
// transform the data structure for the completion | ||
for _, i := range list { | ||
res = append(res, i.Port.Address) | ||
} | ||
return res | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.