mirror of
https://github.com/github/semantic.git
synced 2024-12-19 12:51:52 +03:00
Produce the callstacks from the assignment constructors.
This commit is contained in:
parent
7079d7541c
commit
2093e85a76
@ -174,7 +174,7 @@ data Error grammar = HasCallStack => Error { errorPos :: Info.Pos, errorExpected
|
||||
deriving instance Eq grammar => Eq (Error grammar)
|
||||
deriving instance Show grammar => Show (Error grammar)
|
||||
|
||||
nodeError :: [grammar] -> Node grammar -> Error grammar
|
||||
nodeError :: HasCallStack => [grammar] -> Node grammar -> Error grammar
|
||||
nodeError expected (Node actual _ (Info.Span spanStart _)) = Error spanStart expected (Just actual)
|
||||
|
||||
|
||||
@ -221,7 +221,7 @@ showPos :: Maybe FilePath -> Info.Pos -> ShowS
|
||||
showPos path Info.Pos{..} = maybe (showParen True (showString "interactive")) showString path . showChar ':' . shows posLine . showChar ':' . shows posColumn
|
||||
|
||||
-- | Run an assignment over an AST exhaustively.
|
||||
assignBy :: (Symbol grammar, Enum grammar, Eq grammar, Recursive ast, Foldable (Base ast), HasCallStack)
|
||||
assignBy :: (Symbol grammar, Enum grammar, Eq grammar, Recursive ast, Foldable (Base ast))
|
||||
=> (forall x. Base ast x -> Node grammar) -- ^ A function to project a 'Node' from the ast.
|
||||
-> Source.Source -- ^ The source for the parse tree.
|
||||
-> Assignment ast grammar a -- ^ The 'Assignment to run.
|
||||
@ -230,7 +230,7 @@ assignBy :: (Symbol grammar, Enum grammar, Eq grammar, Recursive ast, Foldable (
|
||||
assignBy toNode source assignment = fmap fst . runAssignment toNode source assignment . makeState . pure
|
||||
|
||||
-- | Run an assignment of nodes in a grammar onto terms in a syntax over an AST exhaustively.
|
||||
runAssignment :: forall grammar a ast. (Symbol grammar, Enum grammar, Eq grammar, Recursive ast, Foldable (Base ast), HasCallStack)
|
||||
runAssignment :: forall grammar a ast. (Symbol grammar, Enum grammar, Eq grammar, Recursive ast, Foldable (Base ast))
|
||||
=> (forall x. Base ast x -> Node grammar) -- ^ A function to project a 'Node' from the ast.
|
||||
-> Source.Source -- ^ The source for the parse tree.
|
||||
-> Assignment ast grammar a -- ^ The 'Assignment' to run.
|
||||
@ -264,7 +264,10 @@ runAssignment toNode source = (\ assignment state -> go assignment state >>= req
|
||||
Alt a b -> yield a state `catchError` (\ err -> yield b state { stateError = Just err })
|
||||
Throw e -> Left e
|
||||
Catch during handler -> (go during state `catchError` (flip go state . handler)) >>= uncurry yield
|
||||
_ -> Left (maybe (Error (statePos state) expectedSymbols Nothing) (nodeError expectedSymbols . toNode) node)
|
||||
Choose{} -> Left (maybe (Error (statePos state) expectedSymbols Nothing) (nodeError expectedSymbols . toNode) node)
|
||||
Project{} -> Left (maybe (Error (statePos state) expectedSymbols Nothing) (nodeError expectedSymbols . toNode) node)
|
||||
Children{} -> Left (maybe (Error (statePos state) expectedSymbols Nothing) (nodeError expectedSymbols . toNode) node)
|
||||
Source -> Left (maybe (Error (statePos state) expectedSymbols Nothing) (nodeError expectedSymbols . toNode) node)
|
||||
|
||||
state | _:_ <- expectedSymbols, all ((== Regular) . symbolType) expectedSymbols = dropAnonymous initialState
|
||||
| otherwise = initialState
|
||||
|
Loading…
Reference in New Issue
Block a user