diff options
author | ptmcg <ptmcg@austin.rr.com> | 2021-11-12 10:11:53 -0600 |
---|---|---|
committer | ptmcg <ptmcg@austin.rr.com> | 2021-11-12 10:11:53 -0600 |
commit | 16b766b97c9c144be8c3fad4fec00417728abfa6 (patch) | |
tree | 4a49acfc67c667d9527d2c467ce8243ad7059c94 /pyparsing | |
parent | b429eb6cda915fb89620cc103913d0faa1b8ef16 (diff) | |
download | pyparsing-git-pyparsing_3.0.6.tar.gz |
Add warning suppression detection for all diagnostic warningspyparsing_3.0.6
Diffstat (limited to 'pyparsing')
-rw-r--r-- | pyparsing/__init__.py | 2 | ||||
-rw-r--r-- | pyparsing/core.py | 59 |
2 files changed, 53 insertions, 8 deletions
diff --git a/pyparsing/__init__.py b/pyparsing/__init__.py index c3b86ad..288618f 100644 --- a/pyparsing/__init__.py +++ b/pyparsing/__init__.py @@ -126,7 +126,7 @@ class version_info(NamedTuple): __version_info__ = version_info(3, 0, 6, "final", 0) -__version_time__ = "12 Nov 2021 13:44 UTC" +__version_time__ = "12 Nov 2021 16:06 UTC" __version__ = __version_info__.__version__ __versionTime__ = __version_time__ __author__ = "Paul McGuire <ptmcg.gm+pyparsing@gmail.com>" diff --git a/pyparsing/core.py b/pyparsing/core.py index 39075d8..ff24eee 100644 --- a/pyparsing/core.py +++ b/pyparsing/core.py @@ -471,6 +471,18 @@ class ParserElement(ABC): self.suppress_warnings_ = [] def suppress_warning(self, warning_type: Diagnostics): + """ + Suppress warnings emitted for a particular diagnostic on this expression. + + Example:: + + base = pp.Forward() + base.suppress_warning(Diagnostics.warn_on_parse_using_empty_Forward) + + # statement would normally raise a warning, but is now suppressed + print(base.parseString("x")) + + """ self.suppress_warnings_.append(warning_type) return self @@ -3987,8 +3999,17 @@ class Or(ParseExpression): return "{" + " ^ ".join(str(e) for e in self.exprs) + "}" def _setResultsName(self, name, listAllMatches=False): - if __diag__.warn_multiple_tokens_in_named_alternation: - if any(isinstance(e, And) for e in self.exprs): + if ( + __diag__.warn_multiple_tokens_in_named_alternation + and Diagnostics.warn_multiple_tokens_in_named_alternation + not in self.suppress_warnings_ + ): + if any( + isinstance(e, And) + and Diagnostics.warn_multiple_tokens_in_named_alternation + not in e.suppress_warnings_ + for e in self.exprs + ): warnings.warn( "{}: setting results name {!r} on {} expression " "will return a list of all parsed tokens in an And alternative, " @@ -4087,8 +4108,17 @@ class MatchFirst(ParseExpression): return "{" + " | ".join(str(e) for e in self.exprs) + "}" def _setResultsName(self, name, listAllMatches=False): - if __diag__.warn_multiple_tokens_in_named_alternation: - if any(isinstance(e, And) for e in self.exprs): + if ( + __diag__.warn_multiple_tokens_in_named_alternation + and Diagnostics.warn_multiple_tokens_in_named_alternation + not in self.suppress_warnings_ + ): + if any( + isinstance(e, And) + and Diagnostics.warn_multiple_tokens_in_named_alternation + not in e.suppress_warnings_ + for e in self.exprs + ): warnings.warn( "{}: setting results name {!r} on {} expression " "will return a list of all parsed tokens in an And alternative, " @@ -5103,6 +5133,8 @@ class Forward(ParseElementEnhance): if ( __diag__.warn_on_match_first_with_lshift_operator and caller_line == self.lshift_line + and Diagnostics.warn_on_match_first_with_lshift_operator + not in self.suppress_warnings_ ): warnings.warn( "using '<<' operator with '|' is probably an error, use '<<='", @@ -5113,7 +5145,11 @@ class Forward(ParseElementEnhance): def __del__(self): # see if we are getting dropped because of '=' reassignment of var instead of '<<=' or '<<' - if self.expr is None and __diag__.warn_on_assignment_to_Forward: + if ( + self.expr is None + and __diag__.warn_on_assignment_to_Forward + and Diagnostics.warn_on_assignment_to_Forward not in self.suppress_warnings_ + ): warnings.warn_explicit( "Forward defined here but no expression attached later using '<<=' or '<<'", UserWarning, @@ -5122,7 +5158,12 @@ class Forward(ParseElementEnhance): ) def parseImpl(self, instring, loc, doActions=True): - if self.expr is None and __diag__.warn_on_parse_using_empty_Forward: + if ( + self.expr is None + and __diag__.warn_on_parse_using_empty_Forward + and Diagnostics.warn_on_parse_using_empty_Forward + not in self.suppress_warnings_ + ): # walk stack until parse_string, scan_string, search_string, or transform_string is found parse_fns = [ "parse_string", @@ -5259,7 +5300,11 @@ class Forward(ParseElementEnhance): return ret def _setResultsName(self, name, list_all_matches=False): - if __diag__.warn_name_set_on_empty_Forward: + if ( + __diag__.warn_name_set_on_empty_Forward + and Diagnostics.warn_name_set_on_empty_Forward + not in self.suppress_warnings_ + ): if self.expr is None: warnings.warn( "{}: setting results name {!r} on {} expression " |