MCPcopy Create free account
hub / github.com/brettlangdon/forge / parseInclude

Method parseInclude

parser.go:224–263  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

222}
223
224func (parser *Parser) parseInclude() error {
225 if parser.curTok.ID != token.STRING {
226 msg := fmt.Sprintf("expected STRING instead found '%s'", parser.curTok.ID)
227 return parser.syntaxError(msg)
228 }
229 pattern := parser.curTok.Literal
230
231 parser.readToken()
232 if isSemicolonOrNewline(parser.curTok.ID) == false {
233 msg := fmt.Sprintf("expected ';' or '\n' instead found '%s'", parser.curTok.Literal)
234 return parser.syntaxError(msg)
235 }
236
237 filenames, err := filepath.Glob(pattern)
238 if err != nil {
239 return err
240 }
241 oldScanner := parser.scanner
242 for _, filename := range filenames {
243 // We have already visited this file, don't include again
244 // DEV: This can cause recursive includes if this isn't here :o
245 if parser.hasParsed(filename) {
246 continue
247 }
248 reader, err := os.Open(filename)
249 defer reader.Close()
250 if err != nil {
251 return err
252 }
253 parser.curSection.AddInclude(filename)
254 parser.scanner = NewScanner(reader)
255 parser.parse()
256 // Make sure to add the filename to the internal list to ensure we don't
257 // accidentally recursively include config files
258 parser.addFile(filename)
259 }
260 parser.scanner = oldScanner
261 parser.readToken()
262 return nil
263}
264
265func (parser *Parser) parseSection(name string) error {
266 section := parser.curSection.AddSection(name)

Callers 1

parseMethod · 0.95

Calls 8

syntaxErrorMethod · 0.95
readTokenMethod · 0.95
hasParsedMethod · 0.95
parseMethod · 0.95
addFileMethod · 0.95
isSemicolonOrNewlineFunction · 0.85
NewScannerFunction · 0.85
AddIncludeMethod · 0.80

Tested by

no test coverage detected