Fixed edge cases for braced reference extractor.
This commit is contained in:
parent
00c470f323
commit
2573332d77
|
@ -2171,16 +2171,29 @@ getModifiedVariableCommand base@(T_SimpleCommand _ _ (T_NormalWord _ (T_Literal
|
||||||
|
|
||||||
getModifiedVariableCommand _ = []
|
getModifiedVariableCommand _ = []
|
||||||
|
|
||||||
getBracedReference s =
|
prop_getBracedReference1 = getBracedReference "foo" == "foo"
|
||||||
let name = takeName $ dropPrefix s in
|
prop_getBracedReference2 = getBracedReference "#foo" == "foo"
|
||||||
if null name then s else name
|
prop_getBracedReference3 = getBracedReference "#" == "#"
|
||||||
|
prop_getBracedReference4 = getBracedReference "##" == "#"
|
||||||
|
prop_getBracedReference5 = getBracedReference "#!" == "!"
|
||||||
|
prop_getBracedReference6 = getBracedReference "!#" == "#"
|
||||||
|
prop_getBracedReference7 = getBracedReference "!foo#?" == "foo"
|
||||||
|
prop_getBracedReference8 = getBracedReference "foo-bar" == "foo"
|
||||||
|
prop_getBracedReference9 = getBracedReference "foo:-bar" == "foo"
|
||||||
|
prop_getBracedReference10= getBracedReference "foo: -1" == "foo"
|
||||||
|
getBracedReference s = fromMaybe s $
|
||||||
|
takeName noPrefix `mplus` getSpecial noPrefix `mplus` getSpecial s
|
||||||
where
|
where
|
||||||
dropPrefix = dropWhile (`elem` "#!")
|
noPrefix = dropPrefix s
|
||||||
takeName s =
|
dropPrefix (c:rest) = if c `elem` "!#" then rest else c:rest
|
||||||
let special = getSpecial s in
|
dropPrefix "" = ""
|
||||||
if null special then takeWhile isVariableChar s else special
|
takeName s = do
|
||||||
|
let name = takeWhile isVariableChar s
|
||||||
|
guard . not $ null name
|
||||||
|
return name
|
||||||
getSpecial (c:_) =
|
getSpecial (c:_) =
|
||||||
if c `elem` "*@#?-$!" then [c] else ""
|
if c `elem` "*@#?-$!" then return [c] else fail "not special"
|
||||||
|
getSpecial _ = fail "empty"
|
||||||
|
|
||||||
getIndexReferences s = fromMaybe [] $ do
|
getIndexReferences s = fromMaybe [] $ do
|
||||||
(_, index, _, _) <- matchRegexAll re s
|
(_, index, _, _) <- matchRegexAll re s
|
||||||
|
|
Loading…
Reference in New Issue