@@ -1856,6 +1856,53 @@ module Make0<LocationSig Location, AstSig<Location> Ast> {
18561856
18571857 /** Provides a set of consistency queries. */
18581858 module Consistency {
1859+ /** Holds if the consistency query `query` has `results` results. */
1860+ query predicate consistencyOverview ( string query , int results ) {
1861+ query = "deadEnd" and results = strictcount ( ControlFlowNode node | deadEnd ( node ) )
1862+ or
1863+ query = "nonUniqueEnclosingCallable" and
1864+ results =
1865+ strictcount ( AstNode n , int callables | nonUniqueEnclosingCallable ( n , callables ) )
1866+ or
1867+ query = "nonUniqueInConditionalContext" and
1868+ results = strictcount ( AstNode n | nonUniqueInConditionalContext ( n ) )
1869+ or
1870+ query = "nonLocalStep" and
1871+ results =
1872+ strictcount ( ControlFlowNode n1 , SuccessorType t , ControlFlowNode n2 |
1873+ nonLocalStep ( n1 , t , n2 )
1874+ )
1875+ or
1876+ query = "ambiguousAdditionalNode" and
1877+ results = strictcount ( AstNode n , string tag | ambiguousAdditionalNode ( n , tag ) )
1878+ or
1879+ query = "missingInNodeForPostOrInOrder" and
1880+ results = strictcount ( AstNode ast | missingInNodeForPostOrInOrder ( ast ) )
1881+ or
1882+ query = "multipleSuccessors" and
1883+ results =
1884+ strictcount ( ControlFlowNode node , SuccessorType t , ControlFlowNode successor |
1885+ multipleSuccessors ( node , t , successor )
1886+ )
1887+ or
1888+ query = "multipleConditionalSuccessorKinds" and
1889+ results =
1890+ strictcount ( ControlFlowNode node , ConditionalSuccessor t1 , ConditionalSuccessor t2 ,
1891+ ControlFlowNode succ1 , ControlFlowNode succ2 |
1892+ multipleConditionalSuccessorKinds ( node , t1 , t2 , succ1 , succ2 )
1893+ )
1894+ or
1895+ query = "directAndConditionalSuccessor" and
1896+ results =
1897+ strictcount ( ControlFlowNode node , ConditionalSuccessor t1 , DirectSuccessor t2 ,
1898+ ControlFlowNode succ1 , ControlFlowNode succ2 |
1899+ directAndConditionalSuccessors ( node , t1 , t2 , succ1 , succ2 )
1900+ )
1901+ or
1902+ query = "selfLoop" and
1903+ results = strictcount ( ControlFlowNode node , SuccessorType t | selfLoop ( node , t ) )
1904+ }
1905+
18591906 /**
18601907 * Holds if `node` is lacking a successor.
18611908 *
@@ -1866,6 +1913,11 @@ module Make0<LocationSig Location, AstSig<Location> Ast> {
18661913 not exists ( node .getASuccessor ( _) )
18671914 }
18681915
1916+ /** Holds if `n` does not have a unique enclosing callable. */
1917+ query predicate nonUniqueEnclosingCallable ( AstNode n , int callables ) {
1918+ callables = strictcount ( getEnclosingCallable ( n ) ) and callables > 1
1919+ }
1920+
18691921 /**
18701922 * Holds if `n` is in a conditional context with multiple condition kinds.
18711923 *
@@ -1987,7 +2039,10 @@ module Make0<LocationSig Location, AstSig<Location> Ast> {
19872039 ControlFlowNode succ1 , ControlFlowNode succ2
19882040 ) {
19892041 succ1 = node .getASuccessor ( t1 ) and
1990- succ2 = node .getASuccessor ( t2 )
2042+ succ2 = node .getASuccessor ( t2 ) and
2043+ // allow for the pattern match true edge when a pattern match
2044+ // expression is not in a conditional context
2045+ not succ1 .isAdditional ( _, patternMatchTrueTag ( ) )
19912046 }
19922047
19932048 /**
0 commit comments