16
16
package projectdata
17
17
18
18
import (
19
+ "bytes"
19
20
"fmt"
20
- "strings "
21
+ "text/template "
21
22
22
23
clipackageindex "github.com/arduino/arduino-cli/arduino/cores/packageindex"
23
24
"github.com/arduino/arduino-lint/internal/project/packageindex"
@@ -46,22 +47,22 @@ func InitializeForPackageIndex() {
46
47
packageIndexSystems = nil
47
48
packageIndexSchemaValidationResult = nil
48
49
if packageIndexLoadError == nil {
49
- packageIndexPackages = getPackageIndexData (PackageIndex (), "" , "packages" , "" , "name " , "" )
50
+ packageIndexPackages = getPackageIndexData (PackageIndex (), "" , "packages" , "" , "{{index . 0}} " , [] string { "name" } )
50
51
51
52
for _ , packageData := range PackageIndexPackages () {
52
- packageIndexPlatforms = append (packageIndexPlatforms , getPackageIndexData (packageData .Object , packageData .JSONPointer , "platforms" , packageData .ID + ": " , "architecture" , "version" )... )
53
+ packageIndexPlatforms = append (packageIndexPlatforms , getPackageIndexData (packageData .Object , packageData .JSONPointer , "platforms" , packageData .ID , ":{{index . 0}}@{{index . 1}} " , [] string { "architecture" , "version" } )... )
53
54
}
54
55
55
56
for _ , platformData := range PackageIndexPlatforms () {
56
- packageIndexBoards = append (packageIndexBoards , getPackageIndexData (platformData .Object , platformData .JSONPointer , "boards" , platformData .ID + " - " , "name" , "" )... )
57
+ packageIndexBoards = append (packageIndexBoards , getPackageIndexData (platformData .Object , platformData .JSONPointer , "boards" , platformData .ID , " - {{index . 0}} " , [] string { "name" } )... )
57
58
}
58
59
59
60
for _ , packageData := range PackageIndexPackages () {
60
- packageIndexTools = append (packageIndexTools , getPackageIndexData (packageData .Object , packageData .JSONPointer , "tools" , packageData .ID + ": " , "name" , "version" )... )
61
+ packageIndexTools = append (packageIndexTools , getPackageIndexData (packageData .Object , packageData .JSONPointer , "tools" , packageData .ID , ":{{index . 0}}@{{index . 1}} " , [] string { "name" , "version" } )... )
61
62
}
62
63
63
64
for _ , toolData := range PackageIndexTools () {
64
- packageIndexSystems = append (packageIndexSystems , getPackageIndexData (toolData .Object , toolData .JSONPointer , "systems" , toolData .ID + " - " , "host" , "" )... )
65
+ packageIndexSystems = append (packageIndexSystems , getPackageIndexData (toolData .Object , toolData .JSONPointer , "systems" , toolData .ID , " - {{index . 0}} " , [] string { "host" } )... )
65
66
}
66
67
67
68
packageIndexSchemaValidationResult = packageindex .Validate (PackageIndex ())
@@ -131,7 +132,7 @@ func PackageIndexSchemaValidationResult() map[compliancelevel.Type]schema.Valida
131
132
return packageIndexSchemaValidationResult
132
133
}
133
134
134
- func getPackageIndexData (interfaceObject map [string ]interface {}, pointerPrefix string , dataKey string , iDPrefix string , iDKey string , versionKey string ) []PackageIndexData {
135
+ func getPackageIndexData (interfaceObject map [string ]interface {}, pointerPrefix string , dataKey string , iDPrefix string , iDSuffixTemplateString string , iDSuffixKeys [] string ) []PackageIndexData {
135
136
var data []PackageIndexData
136
137
137
138
interfaceSlice , ok := interfaceObject [dataKey ].([]interface {})
@@ -154,33 +155,30 @@ func getPackageIndexData(interfaceObject map[string]interface{}, pointerPrefix s
154
155
// In the event missing data prevents creating a standard reference ID for the data, use the JSON pointer.
155
156
fallbackID := interfaceElementData .JSONPointer
156
157
157
- if iDPrefix != "" && strings . HasPrefix ( iDPrefix , pointerPrefix ) {
158
+ if iDPrefix != "" && iDPrefix == pointerPrefix {
158
159
// Parent object uses fallback ID, so this one must even if it was possible to generate a true suffix.
159
160
return fallbackID
160
161
}
161
- iD := iDPrefix
162
162
163
- iDSuffix , ok := object [iDKey ].(string )
164
- if ! ok {
165
- return fallbackID
166
- }
167
- if iDSuffix == "" {
168
- return fallbackID
169
- }
170
- iD += iDSuffix
171
-
172
- if versionKey != "" {
173
- iDVersion , ok := object [versionKey ].(string )
163
+ // Gather the ID suffix components.
164
+ iDSuffixComponents := []string {}
165
+ for _ , key := range iDSuffixKeys {
166
+ component , ok := object [key ].(string )
174
167
if ! ok {
175
168
return fallbackID
176
169
}
177
- if iDVersion == "" {
170
+ if component == "" {
178
171
return fallbackID
179
172
}
180
- iD += "@" + iDVersion
173
+ iDSuffixComponents = append ( iDSuffixComponents , component )
181
174
}
182
175
183
- return iD
176
+ // Fill the ID suffix components into the template.
177
+ iDSuffixTemplate := template .Must (template .New ("iDSuffixTemplate" ).Parse (iDSuffixTemplateString ))
178
+ iDSuffix := new (bytes.Buffer )
179
+ iDSuffixTemplate .Execute (iDSuffix , iDSuffixComponents )
180
+
181
+ return iDPrefix + iDSuffix .String ()
184
182
}
185
183
interfaceElementData .ID = objectID ()
186
184
0 commit comments