def main() -> int: # When running semgrep as a command line tool # silence root level logger otherwise logs higher # than warning are handled twice logger = getLogger("semgrep") logger.propagate = False metric_manager.set_version(__VERSION__) try: cli() # Catch custom exceptions, output the right message and exit. # Note: this doesn't catch all Exceptions and lets them bubble up. except SemgrepError as e: metric_manager.set_return_code(e.code) return e.code else: metric_manager.set_return_code(OK_EXIT_CODE) return OK_EXIT_CODE finally: metric_manager.send()
from semgrep.error import Level from semgrep.error import MISSING_CONFIG_EXIT_CODE from semgrep.error import SemgrepError from semgrep.metric_manager import metric_manager from semgrep.output import OutputHandler from semgrep.output import OutputSettings from semgrep.profile_manager import ProfileManager from semgrep.rule import Rule from semgrep.rule_match import RuleMatch from semgrep.semgrep_types import TAINT_MODE from semgrep.target_manager import TargetManager from semgrep.util import manually_search_file from semgrep.util import sub_check_output from semgrep.verbose_logging import getLogger logger = getLogger(__name__) def notify_user_of_work( filtered_rules: List[Rule], include: List[str], exclude: List[str], ) -> None: """ Notify user of what semgrep is about to do, including: - number of rules - which rules? <- not yet, too cluttered - which dirs are excluded, etc. """ if include: logger.info(f"including files:")
from peewee import ModelSelect from ruamel.yaml import YAML import semgrep.semgrep_main from semgrep.config_resolver import Config from semgrep.config_resolver import resolve_config from semgrep.error import ERROR_MAP from semgrep.error import FATAL_EXIT_CODE from semgrep.error import Level from semgrep.error import SemgrepError from semgrep.pattern_match import PatternMatch from semgrep.rule import Rule from semgrep.rule_match import RuleMatch from semgrep.verbose_logging import getLogger logger = getLogger(__file__) yaml = YAML() # TODO: refactor into nice code files instead of this giant file # TODO: probably, add error handling # TODO: decide how to represent these kinds of rules in the output. # TODO(bug): join rules don't propagate metavariables forward into messages # # report the last finding? report multiple findings? class InvalidConditionError(SemgrepError): level = Level.ERROR code = FATAL_EXIT_CODE