Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Annlix
ShellCheck
提交
0a1beb88
S
ShellCheck
项目概览
Annlix
/
ShellCheck
与 Fork 源项目一致
Fork自
镜像 / koalaman / ShellCheck
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
ShellCheck
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0a1beb88
编写于
7月 19, 2015
作者:
V
Vidar Holen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Don't warn about unquoted :+ expansions.
上级
83adcba8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
18 addition
and
3 deletion
+18
-3
ShellCheck/Analytics.hs
ShellCheck/Analytics.hs
+18
-3
未找到文件。
ShellCheck/Analytics.hs
浏览文件 @
0a1beb88
...
...
@@ -970,10 +970,16 @@ prop_checkUnquotedDollarAt5 = verifyNot checkUnquotedDollarAt "ls ${foo/@/ at }"
prop_checkUnquotedDollarAt6
=
verifyNot
checkUnquotedDollarAt
"a=$@"
prop_checkUnquotedDollarAt7
=
verify
checkUnquotedDollarAt
"for f in ${var[@]}; do true; done"
prop_checkUnquotedDollarAt8
=
verifyNot
checkUnquotedDollarAt
"echo
\"
${args[@]:+${args[@]}}
\"
"
prop_checkUnquotedDollarAt9
=
verifyNot
checkUnquotedDollarAt
"echo ${args[@]:+
\"
${args[@]}
\"
}"
checkUnquotedDollarAt
p
word
@
(
T_NormalWord
_
parts
)
|
not
$
isStrictlyQuoteFree
(
parentMap
p
)
word
=
forM_
(
take
1
$
filter
isArrayExpansion
parts
)
$
\
x
->
err
(
getId
x
)
2068
"Double quote array expansions to avoid re-splitting elements."
unless
(
isAlternative
x
)
$
err
(
getId
x
)
2068
"Double quote array expansions to avoid re-splitting elements."
where
-- Fixme: should detect whether the alterantive is quoted
isAlternative
(
T_DollarBraced
_
t
)
=
":+"
`
isInfixOf
`
bracedString
t
isAlternative
_
=
False
checkUnquotedDollarAt
_
_
=
return
()
prop_checkConcatenatedDollarAt1
=
verify
checkConcatenatedDollarAt
"echo
\"
foo$@
\"
"
...
...
@@ -2526,6 +2532,7 @@ prop_checkSpacefulness23= verifyNotTree checkSpacefulness "a=(1); echo ${a[@]}"
prop_checkSpacefulness24
=
verifyTree
checkSpacefulness
"a='a b'; cat <<< $a"
prop_checkSpacefulness25
=
verifyTree
checkSpacefulness
"a='s/[0-9]//g'; sed $a"
prop_checkSpacefulness26
=
verifyTree
checkSpacefulness
"a='foo bar'; echo {1,2,$a}"
prop_checkSpacefulness27
=
verifyNotTree
checkSpacefulness
"echo ${a:+'foo'}"
checkSpacefulness
params
t
=
doVariableFlowAnalysis
readF
writeF
(
Map
.
fromList
defaults
)
(
variableFlow
params
)
...
...
@@ -2546,6 +2553,7 @@ checkSpacefulness params t =
&&
not
(
isArrayExpansion
token
)
-- There's another warning for this
&&
not
(
isCounting
token
)
&&
not
(
isQuoteFree
parents
token
)
&&
not
(
isQuotedAlternative
token
)
&&
not
(
usedAsCommandName
parents
token
)]
where
warning
=
"Double quote to prevent globbing and word splitting."
...
...
@@ -2570,6 +2578,13 @@ checkSpacefulness params t =
_
->
False
isCounting
_
=
False
-- FIXME: doesn't handle ${a:+$var} vs ${a:+"$var"}
isQuotedAlternative
t
=
case
t
of
T_DollarBraced
_
l
->
":+"
`
isInfixOf
`
bracedString
l
_
->
False
isSpacefulWord
::
(
String
->
Bool
)
->
[
Token
]
->
Bool
isSpacefulWord
f
=
any
(
isSpaceful
f
)
isSpaceful
::
(
String
->
Bool
)
->
Token
->
Bool
...
...
@@ -3437,7 +3452,7 @@ prop_checkMaskedReturns5 = verifyNot checkMaskedReturns "f() { local -r a=$(fals
checkMaskedReturns
_
t
@
(
T_SimpleCommand
id
_
(
cmd
:
rest
))
=
potentially
$
do
name
<-
getCommandName
t
guard
$
name
`
elem
`
[
"declare"
,
"export"
]
||
name
==
"local"
&&
"r"
`
notElem
`
(
map
snd
$
getAllFlags
t
)
||
name
==
"local"
&&
"r"
`
notElem
`
map
snd
(
getAllFlags
t
)
return
$
mapM_
checkArgs
rest
where
checkArgs
(
T_Assignment
id
_
_
_
word
)
|
any
hasReturn
$
getWordParts
word
=
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录