A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/arduino/arduino-cli/commit/ae68728ffb883cde81566383e7ce97b0adfe0301 below:

Auto-import libraries based on sketch profile. (#2951) · arduino/arduino-cli@ae68728 · GitHub

1 +

// This file is part of arduino-cli.

2 +

//

3 +

// Copyright 2024 ARDUINO SA (http://www.arduino.cc/)

4 +

//

5 +

// This software is released under the GNU General Public License version 3,

6 +

// which covers the main part of arduino-cli.

7 +

// The terms of this license can be found at:

8 +

// https://www.gnu.org/licenses/gpl-3.0.en.html

9 +

//

10 +

// You can be released from the requirements of the above licenses by purchasing

11 +

// a commercial license. Buying such a license is mandatory if you want to

12 +

// modify or otherwise use the software for commercial activities involving the

13 +

// Arduino software without disclosing the source code of your own applications.

14 +

// To purchase a commercial license, send an email to license@arduino.cc.

15 + 16 +

package detector

17 + 18 +

import (

19 +

"encoding/json"

20 +

"fmt"

21 + 22 +

"github.com/arduino/go-paths-helper"

23 +

)

24 + 25 +

type detectorCache struct {

26 +

curr int

27 +

entries []*detectorCacheEntry

28 +

}

29 + 30 +

type detectorCacheEntry struct {

31 +

AddedIncludePath *paths.Path `json:"added_include_path,omitempty"`

32 +

CompilingSourcePath *paths.Path `json:"compiling_source_path,omitempty"`

33 +

MissingIncludeH *string `json:"missing_include_h,omitempty"`

34 +

}

35 + 36 +

func (e *detectorCacheEntry) String() string {

37 +

if e.AddedIncludePath != nil {

38 +

return "Added include path: " + e.AddedIncludePath.String()

39 +

}

40 +

if e.CompilingSourcePath != nil {

41 +

return "Compiling source path: " + e.CompilingSourcePath.String()

42 +

}

43 +

if e.MissingIncludeH != nil {

44 +

if *e.MissingIncludeH == "" {

45 +

return "No missing include files detected"

46 +

}

47 +

return "Missing include file: " + *e.MissingIncludeH

48 +

}

49 +

return "No operation"

50 +

}

51 + 52 +

func (e *detectorCacheEntry) Equals(entry *detectorCacheEntry) bool {

53 +

return e.String() == entry.String()

54 +

}

55 + 56 +

func newDetectorCache() *detectorCache {

57 +

return &detectorCache{}

58 +

}

59 + 60 +

func (c *detectorCache) String() string {

61 +

res := ""

62 +

for _, entry := range c.entries {

63 +

res += fmt.Sprintln(entry)

64 +

}

65 +

return res

66 +

}

67 + 68 +

// Load reads a saved cache from the given file.

69 +

// If the file do not exists, it does nothing.

70 +

func (c *detectorCache) Load(cacheFile *paths.Path) error {

71 +

if exist, err := cacheFile.ExistCheck(); err != nil {

72 +

return err

73 +

} else if !exist {

74 +

return nil

75 +

}

76 +

data, err := cacheFile.ReadFile()

77 +

if err != nil {

78 +

return err

79 +

}

80 +

var entries []*detectorCacheEntry

81 +

if err := json.Unmarshal(data, &entries); err != nil {

82 +

return err

83 +

}

84 +

c.curr = 0

85 +

c.entries = entries

86 +

return nil

87 +

}

88 + 89 +

// Expect adds an entry to the cache and checks if it matches the next expected entry.

90 +

func (c *detectorCache) Expect(entry *detectorCacheEntry) {

91 +

if c.curr < len(c.entries) {

92 +

if c.entries[c.curr].Equals(entry) {

93 +

// Cache hit, move to the next entry

94 +

c.curr++

95 +

return

96 +

}

97 +

// Cache mismatch, invalidate and cut the remainder of the cache

98 +

c.entries = c.entries[:c.curr]

99 +

}

100 +

c.curr++

101 +

c.entries = append(c.entries, entry)

102 +

}

103 + 104 +

// Peek returns the next cache entry to be expected or nil if the cache is fully consumed.

105 +

func (c *detectorCache) Peek() *detectorCacheEntry {

106 +

if c.curr < len(c.entries) {

107 +

return c.entries[c.curr]

108 +

}

109 +

return nil

110 +

}

111 + 112 +

// Save writes the current cache to the given file.

113 +

func (c *detectorCache) Save(cacheFile *paths.Path) error {

114 +

// Cut off the cache if it is not fully consumed

115 +

c.entries = c.entries[:c.curr]

116 + 117 +

data, err := json.MarshalIndent(c.entries, "", " ")

118 +

if err != nil {

119 +

return err

120 +

}

121 +

return cacheFile.WriteFile(data)

122 +

}


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4