Skip to content

Commit

Permalink
Merge pull request #16940 from RasmusWL/rasmuswl/BuiltinModuleExtract…
Browse files Browse the repository at this point in the history
…able

Python: Handle diagnostics writing for `BuiltinModuleExtractable`
  • Loading branch information
RasmusWL authored Jul 12, 2024
2 parents 8a9f0bf + 354394d commit 1de2943
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 7 deletions.
6 changes: 4 additions & 2 deletions python/extractor/semmle/logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -373,7 +373,8 @@ def syntax_error_message(exception, unit):
return error

def recursion_error_message(exception, unit):
l = Location(file=unit.path)
# if unit is a BuiltinModuleExtractable, there will be no path attribute
l = Location(file=unit.path) if hasattr(unit, "path") else None
return (DiagnosticMessage(Source("py/diagnostics/recursion-error", "Recursion error in Python extractor"), Severity.ERROR)
.with_location(l)
.text(exception.args[0])
Expand All @@ -383,7 +384,8 @@ def recursion_error_message(exception, unit):
)

def internal_error_message(exception, unit):
l = Location(file=unit.path)
# if unit is a BuiltinModuleExtractable, there will be no path attribute
l = Location(file=unit.path) if hasattr(unit, "path") else None
return (DiagnosticMessage(Source("py/diagnostics/internal-error", "Internal error in Python extractor"), Severity.ERROR)
.with_location(l)
.text("Internal error")
Expand Down
2 changes: 1 addition & 1 deletion python/extractor/semmle/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

#Semantic version of extractor.
#Update this if any changes are made
VERSION = "6.1.1"
VERSION = "6.1.2"

PY_EXTENSIONS = ".py", ".pyw"

Expand Down
16 changes: 12 additions & 4 deletions python/extractor/semmle/worker.py
Original file line number Diff line number Diff line change
Expand Up @@ -274,16 +274,24 @@ def _extract_loop(proc_id, queue, trap_dir, archive, options, reply_queue, logge
# Syntax errors have already been handled in extractor.py
reply_queue.put(("FAILURE", unit, None))
except RecursionError as ex:
error = recursion_error_message(ex, unit)
diagnostics_writer.write(error)
logger.error("Failed to extract %s: %s", unit, ex)
logger.traceback(WARN)
try:
error = recursion_error_message(ex, unit)
diagnostics_writer.write(error)
except Exception as ex:
logger.warning("Failed to write diagnostics: %s", ex)
logger.traceback(WARN)
reply_queue.put(("FAILURE", unit, None))
except Exception as ex:
error = internal_error_message(ex, unit)
diagnostics_writer.write(error)
logger.error("Failed to extract %s: %s", unit, ex)
logger.traceback(WARN)
try:
error = internal_error_message(ex, unit)
diagnostics_writer.write(error)
except Exception as ex:
logger.warning("Failed to write diagnostics: %s", ex)
logger.traceback(WARN)
reply_queue.put(("FAILURE", unit, None))
else:
reply_queue.put(("SUCCESS", unit, None))
Expand Down

0 comments on commit 1de2943

Please sign in to comment.