Use Arduino CLI infrastructure for querying library index · arduino/arduino-lint@455001d (original) (raw)
`@@ -16,19 +16,20 @@
`
16
16
`package projectdata
`
17
17
``
18
18
`import (
`
19
``
`-
"encoding/json"
`
20
``
`-
"io/ioutil"
`
``
19
`+
"io"
`
21
20
`"net/http"
`
22
21
`"os"
`
23
22
``
24
23
`"github.com/arduino/arduino-cli/arduino/libraries"
`
``
24
`+
"github.com/arduino/arduino-cli/arduino/libraries/librariesmanager"
`
25
25
`"github.com/arduino/arduino-lint/internal/configuration"
`
26
26
`"github.com/arduino/arduino-lint/internal/configuration/rulemode"
`
27
27
`"github.com/arduino/arduino-lint/internal/project"
`
28
28
`"github.com/arduino/arduino-lint/internal/project/library/libraryproperties"
`
29
29
`"github.com/arduino/arduino-lint/internal/result/feedback"
`
30
30
`"github.com/arduino/arduino-lint/internal/rule/schema"
`
31
31
`"github.com/arduino/arduino-lint/internal/rule/schema/compliancelevel"
`
``
32
`+
"github.com/arduino/go-paths-helper"
`
32
33
`"github.com/arduino/go-properties-orderedmap"
`
33
34
`"github.com/client9/misspell"
`
34
35
`"github.com/sirupsen/logrus"
`
`@@ -60,23 +61,34 @@ func InitializeForLibrary(project project.Type) {
`
60
61
``
61
62
`// Download the Library Manager index if needed.
`
62
63
`if !configuration.RuleModes(project.SuperprojectType)[rulemode.LibraryManagerIndexing] && libraryManagerIndex == nil {
`
63
``
`-
url := "http://downloads.arduino.cc/libraries/library_index.json"
`
64
``
`-
httpResponse, err := http.Get(url)
`
``
64
`+
// Set up the temporary folder for the index
`
``
65
`+
libraryIndexFolderPath, err := paths.TempDir().MkTempDir("arduino-lint-library-index-folder")
`
``
66
`+
defer libraryIndexFolderPath.RemoveAll()
`
65
67
`if err != nil {
`
66
``
`-
feedback.Errorf("Unable to download Library Manager index from %s: %s", err, url)
`
``
68
`+
panic(err)
`
``
69
`+
}
`
``
70
`+
libraryIndexPath := libraryIndexFolderPath.Join("library_index.json")
`
``
71
+
``
72
`+
// Download the index data
`
``
73
`+
httpResponse, err := http.Get(librariesmanager.LibraryIndexURL.String())
`
``
74
`+
if err != nil {
`
``
75
`+
feedback.Errorf("Unable to download Library Manager index from %s: %s", err, librariesmanager.LibraryIndexURL)
`
67
76
`os.Exit(1)
`
68
77
` }
`
69
78
`defer httpResponse.Body.Close()
`
70
79
``
71
``
`-
bytes, err := ioutil.ReadAll(httpResponse.Body)
`
``
80
`+
// Write the index data to file
`
``
81
`+
libraryIndexFile, err := libraryIndexPath.Create()
`
``
82
`+
defer libraryIndexFile.Close()
`
72
83
`if err != nil {
`
73
84
`panic(err)
`
74
85
` }
`
75
``
-
76
``
`-
err = json.Unmarshal(bytes, &libraryManagerIndex)
`
77
``
`-
if err != nil {
`
``
86
`+
if _, err := io.Copy(libraryIndexFile, httpResponse.Body); err != nil {
`
78
87
`panic(err)
`
79
88
` }
`
``
89
+
``
90
`+
libraryManagerIndex = librariesmanager.NewLibraryManager(libraryIndexFolderPath, nil)
`
``
91
`+
libraryManagerIndex.LoadIndex()
`
80
92
` }
`
81
93
``
82
94
`if misspelledWordsReplacer == nil { // The replacer only needs to be compiled once per run.
`
`@@ -120,10 +132,10 @@ func SourceHeaders() []string {
`
120
132
`return sourceHeaders
`
121
133
`}
`
122
134
``
123
``
`-
var libraryManagerIndex map[string]interface{}
`
``
135
`+
var libraryManagerIndex *librariesmanager.LibrariesManager
`
124
136
``
125
137
`// LibraryManagerIndex returns the Library Manager index data.
`
126
``
`-
func LibraryManagerIndex() map[string]interface{} {
`
``
138
`+
func LibraryManagerIndex() *librariesmanager.LibrariesManager {
`
127
139
`return libraryManagerIndex
`
128
140
`}
`
129
141
``