diff --git a/src/ShellCheck/Analytics.hs b/src/ShellCheck/Analytics.hs index f93ebae..7eed121 100644 --- a/src/ShellCheck/Analytics.hs +++ b/src/ShellCheck/Analytics.hs @@ -1820,6 +1820,7 @@ prop_checkUnused36= verifyNotTree checkUnusedAssignments "if [[ -v foo ]]; then prop_checkUnused37= verifyNotTree checkUnusedAssignments "fd=2; exec {fd}>&-" prop_checkUnused38= verifyTree checkUnusedAssignments "(( a=42 ))" prop_checkUnused39= verifyNotTree checkUnusedAssignments "declare -x -f foo" +prop_checkUnused40= verifyNotTree checkUnusedAssignments "arr=(1 2); num=2; echo \"${arr[@]:num}\"" checkUnusedAssignments params t = execWriter (mapM_ warnFor unused) where flow = variableFlow params diff --git a/src/ShellCheck/AnalyzerLib.hs b/src/ShellCheck/AnalyzerLib.hs index fc5e30b..a8b1fff 100644 --- a/src/ShellCheck/AnalyzerLib.hs +++ b/src/ShellCheck/AnalyzerLib.hs @@ -622,12 +622,17 @@ getIndexReferences s = fromMaybe [] $ do where re = mkRegex "(\\[.*\\])" +prop_getOffsetReferences1 = getOffsetReferences ":bar" == ["bar"] +prop_getOffsetReferences2 = getOffsetReferences ":bar:baz" == ["bar", "baz"] +prop_getOffsetReferences3 = getOffsetReferences "[foo]:bar" == ["bar"] +prop_getOffsetReferences4 = getOffsetReferences "[foo]:bar:baz" == ["bar", "baz"] getOffsetReferences mods = fromMaybe [] $ do +-- if mods start with [, then drop until ] match <- matchRegex re mods - offsets <- match !!! 0 + offsets <- match !!! 1 return $ matchAllStrings variableNameRegex offsets where - re = mkRegex "^ *:([^-=?+].*)" + re = mkRegex "^(\\[.+\\])? *:([^-=?+].*)" getReferencedVariables parents t = case t of