Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Annlix
ShellCheck
提交
d3a4c985
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,发现更多精彩内容 >>
提交
d3a4c985
编写于
12月 02, 2012
作者:
V
Vidar Holen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Read any -* as binary/unary op, and warn on unknown.
上级
35b8d58c
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
34 addition
and
15 deletion
+34
-15
ShellCheck/Analytics.hs
ShellCheck/Analytics.hs
+14
-1
ShellCheck/Parser.hs
ShellCheck/Parser.hs
+20
-14
未找到文件。
ShellCheck/Analytics.hs
浏览文件 @
d3a4c985
...
...
@@ -75,6 +75,7 @@ basicChecks = [
,
checkQuotedCondRegex
,
checkForInCat
,
checkFindExec
,
checkValidCondOps
]
modifyMap
=
modify
...
...
@@ -227,7 +228,7 @@ isMagicInQuotes _ = False
prop_checkShebang1
=
verifyFull
checkShebang
"#!/usr/bin/env bash -x
\n
echo cow"
prop_checkShebang2
=
verifyNotFull
checkShebang
"#! /bin/sh -l "
checkShebang
(
T_Script
id
sb
_
)
m
=
if
(
length
$
words
sb
)
>
2
then
if
(
length
$
words
sb
)
>
2
then
let
note
=
Note
ErrorC
$
"On most OS, shebangs can only specify a single parameter."
in
Map
.
adjust
(
\
(
Metadata
pos
notes
)
->
Metadata
pos
(
note
:
notes
))
id
m
else
m
...
...
@@ -514,6 +515,18 @@ checkDollarArithmeticCommand _ = return ()
allModifiedVariables
t
=
snd
$
runState
(
doAnalysis
(
\
x
->
modify
$
(
++
)
(
getModifiedVariables
x
))
t
)
[]
prop_checkValidCondOps1
=
verify
checkValidCondOps
"[[ a -xz b ]]"
prop_checkValidCondOps2
=
verify
checkValidCondOps
"[ -M a ]"
prop_checkValidCondOps3
=
verifyNot
checkValidCondOps
"[ 1 = 2 -a 3 -ge 4 ]"
prop_checkValidCondOps4
=
verifyNot
checkValidCondOps
"[[ ! -v foo ]]"
checkValidCondOps
(
TC_Binary
id
_
s
_
_
)
|
not
(
s
`
elem
`
[
"-nt"
,
"-ot"
,
"-ef"
,
"=="
,
"!="
,
"<="
,
">="
,
"-eq"
,
"-ne"
,
"-lt"
,
"-le"
,
"-gt"
,
"-ge"
,
"=~"
,
">"
,
"<"
,
"="
])
=
warn
id
"Unknown binary operator."
checkValidCondOps
(
TC_Unary
id
_
s
_
)
|
not
(
s
`
elem
`
[
"!"
,
"-a"
,
"-b"
,
"-c"
,
"-d"
,
"-e"
,
"-f"
,
"-g"
,
"-h"
,
"-L"
,
"-k"
,
"-p"
,
"-r"
,
"-s"
,
"-S"
,
"-t"
,
"-u"
,
"-w"
,
"-x"
,
"-O"
,
"-G"
,
"-N"
,
"-z"
,
"-n"
,
"-o"
,
"-v"
,
"-R"
])
=
warn
id
"Unknown unary operator."
checkValidCondOps
_
=
return
()
--- Context seeking
getParentTree
t
=
...
...
ShellCheck/Parser.hs
浏览文件 @
d3a4c985
...
...
@@ -212,13 +212,19 @@ readConditionContents single = do
where
typ
=
if
single
then
SingleBracket
else
DoubleBracket
readCondBinaryOp
=
try
$
do
op
<-
choice
$
(
map
tryOp
[
"-nt"
,
"-ot"
,
"-ef"
,
"=="
,
"!="
,
"<="
,
">="
,
"-eq"
,
"-ne"
,
"-lt"
,
"-le"
,
"-gt"
,
"-ge"
,
"=~"
,
">"
,
"<"
,
"="
])
id
<-
getNextId
op
<-
(
choice
$
(
map
tryOp
[
"=="
,
"!="
,
"<="
,
">="
,
"=~"
,
">"
,
"<"
,
"="
]))
<|>
otherOp
hardCondSpacing
return
op
where
tryOp
s
=
try
$
do
id
<-
getNextId
string
s
return
$
TC_Binary
id
typ
s
where
tryOp
s
=
try
$
do
id
<-
getNextId
string
s
return
$
TC_Binary
id
typ
s
otherOp
=
try
$
do
id
<-
getNextId
s
<-
readOp
return
$
TC_Binary
id
typ
s
readCondUnaryExp
=
do
op
<-
readCondUnaryOp
...
...
@@ -231,15 +237,15 @@ readConditionContents single = do
fail
"oops"
)
readCondUnaryOp
=
try
$
do
op
<-
choice
$
(
map
tryOp
[
"-a"
,
"-b"
,
"-c"
,
"-d"
,
"-e"
,
"-f"
,
"-g"
,
"-h"
,
"-L"
,
"-k"
,
"-p"
,
"-r"
,
"-s"
,
"-S"
,
"-t"
,
"-u"
,
"-w"
,
"-x"
,
"-O"
,
"-G"
,
"-N"
,
"-z"
,
"-n"
,
"-o"
,
"-v"
,
"-R"
])
id
<-
getNextId
s
<-
readOp
hardCondSpacing
return
op
where
tryOp
s
=
try
$
do
id
<-
getNextId
string
s
return
$
TC_Unary
id
typ
s
return
$
TC_Unary
id
typ
s
readOp
=
try
$
do
char
'-'
s
<-
many1
letter
return
(
'-'
:
s
)
readCondWord
=
do
notFollowedBy2
(
try
(
spacing
>>
(
string
"]"
)))
...
...
@@ -733,7 +739,7 @@ readDollarDoubleQuote = do
x
<-
many
doubleQuotedPart
doubleQuote
<?>
"end of translated double quoted string"
return
$
T_DollarDoubleQuoted
id
x
prop_readDollarArithmetic
=
isOk
readDollarArithmetic
"$(( 3 * 4 +5))"
prop_readDollarArithmetic2
=
isOk
readDollarArithmetic
"$(((3*4)+(1*2+(3-1))))"
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录