chore(gazelle): Rename GAZELLE_VERBOSE env var; use idiomatic go; add comments (#2428) Address PR comments from #2420: + Add and update comments + idiomatic go: return early + rename and document env var
diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a1c17d..9cd6b82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md
@@ -87,7 +87,7 @@ {#v0-0-0-added} ### Added * (gazelle): Parser failures will now be logged to the terminal. Additional - details can be logged by setting `GAZELLE_VERBOSE=1`. + details can be logged by setting `RULES_PYTHON_GAZELLE_VERBOSE=1`. * (toolchains) allow users to select which variant of the support host toolchain they would like to use through `RULES_PYTHON_REPO_TOOLCHAIN_{VERSION}_{OS}_{ARCH}` env variable setting. For
diff --git a/docs/environment-variables.md b/docs/environment-variables.md index 906281d..12c1bcf 100644 --- a/docs/environment-variables.md +++ b/docs/environment-variables.md
@@ -56,3 +56,9 @@ When `1`, debug information about coverage behavior is printed to stderr. ::: + + +:::{envvar} RULES_PYTHON_GAZELLE_VERBOSE + +When `1`, debug information from gazelle is printed to stderr. +:::
diff --git a/gazelle/python/file_parser.go b/gazelle/python/file_parser.go index 9101621..a1f47f4 100644 --- a/gazelle/python/file_parser.go +++ b/gazelle/python/file_parser.go
@@ -69,18 +69,29 @@ } root := tree.RootNode() - if root.HasError() { - log.Printf("WARNING: failed to parse %q. The resulting BUILD target may be incorrect.", path) + if !root.HasError() { + return root, nil + } - verbose, envExists := os.LookupEnv("GAZELLE_VERBOSE") - if envExists && verbose == "1" { - for i := 0; i < int(root.ChildCount()); i++ { - child := root.Child(i) - if child.IsError() { - log.Printf("Parse error at %+v:\n%+v", child.StartPoint(), child.Content(code)) - log.Printf("The above was parsed as: %v", child.String()) - } - } + log.Printf("WARNING: failed to parse %q. The resulting BUILD target may be incorrect.", path) + + // Note: we intentionally do not return an error even when root.HasError because the parse + // failure may be in some part of the code that Gazelle doesn't care about. + verbose, envExists := os.LookupEnv("RULES_PYTHON_GAZELLE_VERBOSE") + if !envExists || verbose != "1" { + return root, nil + } + + for i := 0; i < int(root.ChildCount()); i++ { + child := root.Child(i) + if child.IsError() { + // Example logs: + // gazelle: Parse error at {Row:1 Column:0}: + // def search_one_more_level[T](): + log.Printf("Parse error at %+v:\n%+v", child.StartPoint(), child.Content(code)) + // Log the internal tree-sitter representation of what was parsed. Eg: + // gazelle: The above was parsed as: (ERROR (identifier) (call function: (list (identifier)) arguments: (argument_list))) + log.Printf("The above was parsed as: %v", child.String()) } }