Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Annlix
ShellCheck
提交
48067190
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,体验更适合开发者的 AI 搜索 >>
提交
48067190
编写于
8月 02, 2022
作者:
V
Vidar Holen
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Handle variable assignments from `read` in CFG
上级
0df93451
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
35 addition
and
1 deletion
+35
-1
src/ShellCheck/CFG.hs
src/ShellCheck/CFG.hs
+34
-1
src/ShellCheck/Data.hs
src/ShellCheck/Data.hs
+1
-0
未找到文件。
src/ShellCheck/CFG.hs
浏览文件 @
48067190
...
...
@@ -41,6 +41,7 @@ module ShellCheck.CFG (
import
GHC.Generics
(
Generic
)
import
ShellCheck.AST
import
ShellCheck.ASTLib
import
ShellCheck.Data
import
ShellCheck.Interface
import
ShellCheck.Prelude
import
ShellCheck.Regex
...
...
@@ -936,6 +937,8 @@ handleCommand cmd vars args literalCmd = do
Just
"mapfile"
->
regularExpansionWithStatus
vars
args
$
handleMapfile
args
Just
"readarray"
->
regularExpansionWithStatus
vars
args
$
handleMapfile
args
Just
"read"
->
regularExpansionWithStatus
vars
args
$
handleRead
args
Just
"DEFINE_boolean"
->
regularExpansionWithStatus
vars
args
$
handleDEFINE
args
Just
"DEFINE_float"
->
regularExpansionWithStatus
vars
args
$
handleDEFINE
args
Just
"DEFINE_integer"
->
regularExpansionWithStatus
vars
args
$
handleDEFINE
args
...
...
@@ -1113,7 +1116,7 @@ handleCommand cmd vars args literalCmd = do
in
IdTagged
id
$
CFWriteVariable
name
CFValueArray
getFromArg
=
do
flags
<-
getGnuOpts
"d:n:O:s:u:C:c:t"
args
flags
<-
getGnuOpts
flagsForMapfile
args
(
_
,
arg
)
<-
lookup
""
flags
name
<-
getLiteralString
arg
return
(
getId
arg
,
name
)
...
...
@@ -1125,6 +1128,36 @@ handleCommand cmd vars args literalCmd = do
guard
$
isVariableName
name
return
(
getId
c
,
name
)
handleRead
(
cmd
:
args
)
=
newNodeRange
$
CFApplyEffects
main
where
main
=
fromMaybe
fallback
$
do
flags
<-
getGnuOpts
flagsForRead
args
return
$
fromMaybe
(
withFields
flags
)
$
withArray
flags
withArray
::
[(
String
,
(
Token
,
Token
))]
->
Maybe
[
IdTagged
CFEffect
]
withArray
flags
=
do
(
_
,
token
)
<-
lookup
"a"
flags
return
$
fromMaybe
[]
$
do
name
<-
getLiteralString
token
return
[
IdTagged
(
getId
token
)
$
CFWriteVariable
name
CFValueArray
]
withFields
flags
=
mapMaybe
getAssignment
flags
getAssignment
::
(
String
,
(
Token
,
Token
))
->
Maybe
(
IdTagged
CFEffect
)
getAssignment
f
=
do
(
""
,
(
t
,
_
))
<-
return
f
name
<-
getLiteralString
t
return
$
IdTagged
(
getId
t
)
$
CFWriteVariable
name
CFValueString
fallback
=
let
names
=
reverse
$
map
fromJust
$
takeWhile
isJust
$
map
(
\
c
->
sequence
(
getId
c
,
getLiteralString
c
))
$
reverse
args
namesOrDefault
=
if
null
names
then
[(
getId
cmd
,
"REPLY"
)]
else
names
hasDashA
=
any
(
==
"a"
)
$
map
fst
$
getGenericOpts
args
value
=
if
hasDashA
then
CFValueArray
else
CFValueString
in
map
(
\
(
id
,
name
)
->
IdTagged
id
$
CFWriteVariable
name
value
)
namesOrDefault
handleDEFINE
(
cmd
:
args
)
=
newNodeRange
$
CFApplyEffects
$
maybeToList
findVar
where
...
...
src/ShellCheck/Data.hs
浏览文件 @
48067190
...
...
@@ -159,5 +159,6 @@ shellForExecutable name =
_
->
Nothing
flagsForRead
=
"sreu:n:N:i:p:a:t:"
flagsForMapfile
=
"d:n:O:s:u:C:c:t"
declaringCommands
=
[
"local"
,
"declare"
,
"export"
,
"readonly"
,
"typeset"
,
"let"
]
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录