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

``