diff --git a/parser/data.go b/parser/data.go index 0643697..52cb5e3 100644 --- a/parser/data.go +++ b/parser/data.go @@ -28,6 +28,13 @@ func (parser *ParsingOperation) parseDataSection () ( section.what, err = parser.parseType() if err != nil { return } + // skip the rest of the section if we are only skimming it + if parser.skimming { + section.external = true + err = parser.skipIndentLevel(1) + return + } + if parser.token.Is(lexer.TokenKindNewline) { err = parser.nextToken() if err != nil { return } diff --git a/parser/parser.go b/parser/parser.go index bb51097..672efea 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -13,6 +13,7 @@ type ParsingOperation struct { token lexer.Token tokens []lexer.Token tokenIndex int + skimming bool tree SyntaxTree } @@ -42,6 +43,7 @@ func Fetch (modulePath string, skim bool) (tree SyntaxTree, err error) { // miss, so parse the module. parser := ParsingOperation { modulePath: modulePath, + skimming: skim, tree: SyntaxTree { sections: make(map[string] Section), }, @@ -155,13 +157,18 @@ func (parser *ParsingOperation) previousToken () { // equal to or greater than the specified indent. func (parser *ParsingOperation) skipIndentLevel (indent int) (err error) { for { + if parser.token.Is(lexer.TokenKindNewline) { + err = parser.nextToken() + if err != nil { return } + + if !parser.token.Is(lexer.TokenKindIndent) || + parser.token.Value().(int) < indent { + + return + } + } + err = parser.nextToken() if err != nil { return } - - if parser.token.Is(lexer.TokenKindIndent) && - parser.token.Value().(int) < indent { - - return - } } } diff --git a/parser/test-common.go b/parser/test-common.go index 918a86d..80ee2fd 100644 --- a/parser/test-common.go +++ b/parser/test-common.go @@ -9,7 +9,6 @@ import "path/filepath" func checkTree (modulePath string, skim bool, correct string, test *testing.T) { cwd, _ := os.Getwd() modulePath = filepath.Join(cwd, modulePath) - println(modulePath) tree, err := Fetch(modulePath, skim) treeString := tree.ToString(0)