]> git.wincent.com - docvim.git/blob - lib/Docvim/Visitor/Mappings.hs
9ba27fba9b488721c5bfa01b1fdf1a6c11bf389a
[docvim.git] / lib / Docvim / Visitor / Mappings.hs
1 module Docvim.Visitor.Mappings (extractMappings) where
2
3 import Control.Applicative (Alternative)
4 import Docvim.AST (Node(MappingsAnnotation))
5 import Docvim.Visitor (endBlock, extractBlocks)
6
7 -- | Extracts a list of nodes (if any exist) from the `@mappings` section(s) of
8 -- the source code.
9 --
10 -- It is not recommended to have multiple `@mappings` sections in a project. If
11 -- multiple such sections (potentially across multiple translation units) exist,
12 -- there are no guarantees about order; they just get concatenated in the order
13 -- we see them.
14 extractMappings :: Alternative f => [Node] -> (f [Node], [Node])
15 extractMappings = extractBlocks f
16   where
17     f x = if x == MappingsAnnotation
18           then Just endBlock
19           else Nothing