Skip to content

Commit 0bcf112

Browse files
committed
'board details' shows info on selected options
This allows to show which option is selected with defaults or with different FQBNs. For example: $ arduino-cli board details arduino:avr:nano Board name: Arduino Nano Option: Processor cpu ATmega328P ✔ cpu=atmega328 ATmega328P (Old Bootloader) cpu=atmega328old ATmega168 cpu=atmega168 or: $ arduino-cli board details arduino:avr:nano:cpu=atmega328old Board name: Arduino Nano Option: Processor cpu ATmega328P cpu=atmega328 ATmega328P (Old Bootloader) ✔ cpu=atmega328old ATmega168 cpu=atmega168
1 parent ea4a983 commit 0bcf112

File tree

1 file changed

+31
-9
lines changed

1 file changed

+31
-9
lines changed

Diff for: commands/board/details.go

+31-9
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"encoding/json"
2222
"os"
2323

24+
"github.com/arduino/arduino-cli/arduino/cores"
2425
"github.com/arduino/arduino-cli/output"
2526

2627
"github.com/arduino/arduino-cli/commands"
@@ -42,8 +43,13 @@ func initDetailsCommand() *cobra.Command {
4243

4344
func runDetailsCommand(cmd *cobra.Command, args []string) {
4445
pm := commands.InitPackageManager()
45-
fqbnIn := args[0]
46-
board, err := pm.FindBoardWithFQBN(fqbnIn)
46+
fqbn, err := cores.ParseFQBN(args[0])
47+
if err != nil {
48+
formatter.PrintError(err, "Error parsing fqbn")
49+
os.Exit(commands.ErrBadArgument)
50+
}
51+
52+
_, _, board, _, _, err := pm.ResolveFQBN(fqbn)
4753
if err != nil {
4854
formatter.PrintError(err, "Error loading board data")
4955
os.Exit(commands.ErrBadArgument)
@@ -53,17 +59,22 @@ func runDetailsCommand(cmd *cobra.Command, args []string) {
5359
details.Name = board.Name()
5460
details.ConfigOptions = []*boardConfigOption{}
5561
options := board.GetConfigOptions()
62+
t := true
5663
for _, option := range options.Keys() {
5764
configOption := &boardConfigOption{}
5865
configOption.Option = option
5966
configOption.OptionLabel = options.Get(option)
67+
selected, hasSelected := fqbn.Configs.GetOk(option)
68+
6069
values := board.GetConfigOptionValues(option)
6170
for i, value := range values.Keys() {
6271
configValue := &boardConfigValue{}
63-
if i == 0 {
64-
t := true
65-
configValue.Default = &t
72+
if hasSelected && value == selected {
73+
configValue.Selected = &t
74+
} else if !hasSelected && i == 0 {
75+
configValue.Selected = &t
6676
}
77+
6778
configValue.Value = value
6879
configValue.ValueLabel = values.Get(value)
6980
configOption.Values = append(configOption.Values, configValue)
@@ -89,7 +100,7 @@ type boardConfigOption struct {
89100
type boardConfigValue struct {
90101
Value string
91102
ValueLabel string
92-
Default *bool `json:",omitempty"`
103+
Selected *bool `json:",omitempty"`
93104
}
94105

95106
func (details *boardDetails) EmitJSON() string {
@@ -103,12 +114,23 @@ func (details *boardDetails) EmitJSON() string {
103114

104115
func (details *boardDetails) EmitTerminal() string {
105116
table := output.NewTable()
106-
table.AddRow("Board name:", output.Red(details.Name))
117+
table.AddRow("Board name:", details.Name)
107118
table.SetColumnWidthMode(1, output.Average)
108119
for _, option := range details.ConfigOptions {
109-
table.AddRow("Option:", option.OptionLabel)
120+
table.AddRow()
121+
table.AddRow("Option:",
122+
option.OptionLabel,
123+
"", option.Option)
110124
for _, value := range option.Values {
111-
table.AddRow("", value.ValueLabel, option.Option+"="+value.Value)
125+
if value.Selected != nil {
126+
table.AddRow("",
127+
output.Green(value.ValueLabel),
128+
output.Green("✔"), output.Green(option.Option+"="+value.Value))
129+
} else {
130+
table.AddRow("",
131+
value.ValueLabel,
132+
"", option.Option+"="+value.Value)
133+
}
112134
}
113135
}
114136
return table.Render()

0 commit comments

Comments
 (0)