Don't suggest subshells for cd ..; foo; cd..

This commit is contained in:
Vidar Holen 2018-09-21 21:08:41 -07:00
parent 3e2cb26119
commit dadfdfde97
1 changed files with 13 additions and 2 deletions

View File

@ -2073,6 +2073,7 @@ prop_checkCdAndBack1 = verify checkCdAndBack "for f in *; do cd $f; git pull; cd
prop_checkCdAndBack2 = verifyNot checkCdAndBack "for f in *; do cd $f || continue; git pull; cd ..; done" prop_checkCdAndBack2 = verifyNot checkCdAndBack "for f in *; do cd $f || continue; git pull; cd ..; done"
prop_checkCdAndBack3 = verifyNot checkCdAndBack "while [[ $PWD != / ]]; do cd ..; done" prop_checkCdAndBack3 = verifyNot checkCdAndBack "while [[ $PWD != / ]]; do cd ..; done"
prop_checkCdAndBack4 = verify checkCdAndBack "cd $tmp; foo; cd -" prop_checkCdAndBack4 = verify checkCdAndBack "cd $tmp; foo; cd -"
prop_checkCdAndBack5 = verifyNot checkCdAndBack "cd ..; foo; cd .."
checkCdAndBack params = doLists checkCdAndBack params = doLists
where where
shell = shellType params shell = shellType params
@ -2095,10 +2096,20 @@ checkCdAndBack params = doLists
getCmd (T_Pipeline id _ [x]) = getCommandName x getCmd (T_Pipeline id _ [x]) = getCommandName x
getCmd _ = Nothing getCmd _ = Nothing
findCdPair list =
case list of
(a:b:rest) ->
if isCdRevert b && not (isCdRevert a)
then return $ getId b
else findCdPair (b:rest)
_ -> Nothing
doList list = doList list =
let cds = filter ((== Just "cd") . getCmd) list in let cds = filter ((== Just "cd") . getCmd) list in
when (length cds >= 2 && isCdRevert (last cds)) $ potentially $ do
info (getId $ last cds) 2103 message cd <- findCdPair cds
return $ info cd 2103 message
message = "Use a ( subshell ) to avoid having to cd back." message = "Use a ( subshell ) to avoid having to cd back."