loadFile loads a Go source file and parses the AST tree.
(fileName string)
| 58 | |
| 59 | // loadFile loads a Go source file and parses the AST tree. |
| 60 | func (c *cacheAST) loadFile(fileName string) error { |
| 61 | if fileName == "" { |
| 62 | return nil |
| 63 | } |
| 64 | if _, ok := c.parsed[fileName]; ok { |
| 65 | return nil |
| 66 | } |
| 67 | // Do not attempt to parse the same file twice. |
| 68 | c.parsed[fileName] = nil |
| 69 | |
| 70 | if !strings.HasSuffix(fileName, ".go") { |
| 71 | // Ignore C and assembly. |
| 72 | return fmt.Errorf("cannot load non-go file %q", fileName) |
| 73 | } |
| 74 | /* #nosec G304 */ |
| 75 | src, err := os.ReadFile(fileName) |
| 76 | if err != nil { |
| 77 | return err |
| 78 | } |
| 79 | c.files[fileName] = src |
| 80 | fset := token.NewFileSet() |
| 81 | parsed, err := parser.ParseFile(fset, fileName, src, 0) |
| 82 | if err != nil { |
| 83 | return fmt.Errorf("failed to parse %w", err) |
| 84 | } |
| 85 | c.parsed[fileName] = &parsedFile{ |
| 86 | lineToByteOffset: lineToByteOffsets(src), |
| 87 | parsed: parsed, |
| 88 | } |
| 89 | return nil |
| 90 | } |
| 91 | |
| 92 | // lineToByteOffsets extract the line number into raw file offset. |
| 93 | // |
no test coverage detected