Skip to content

Commit c700665

Browse files
committed
Fix zsh parser
1 parent 9949b32 commit c700665

File tree

2 files changed

+49
-2
lines changed

2 files changed

+49
-2
lines changed

shell/parser_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,51 @@ function function_test() {
2323
{Name: "f1", Description: "This is a function to run"},
2424
{Name: "function_test", Description: ""},
2525
})
26+
fs, err = Parse("sh", []byte(`
27+
# This is a function to run
28+
function f1() {
29+
echo e;
30+
}
31+
32+
function function_test() {
33+
echo e;
34+
}
35+
`))
36+
assert.NoError(t, err)
37+
assert.Len(t, fs, 2)
38+
assert.Equal(t, fs, []Function{
39+
{Name: "f1", Description: "This is a function to run"},
40+
{Name: "function_test", Description: ""},
41+
})
42+
fs, err = Parse("fish", []byte(`
43+
function f1 -d "This is a function to run"
44+
echo e
45+
end
46+
47+
function f2
48+
echo e
49+
end
50+
`))
51+
assert.NoError(t, err)
52+
assert.Len(t, fs, 2)
53+
assert.Equal(t, fs, []Function{
54+
{Name: "f1", Description: "This is a function to run"},
55+
{Name: "f2", Description: ""},
56+
})
57+
fs, err = Parse("zsh", []byte(`
58+
# This is a function to run
59+
function f1 {
60+
echo e
61+
}
62+
function f2 () {
63+
echo e
64+
}
65+
`))
66+
assert.NoError(t, err)
67+
assert.Len(t, fs, 2)
68+
assert.Equal(t, fs, []Function{
69+
{Name: "f1", Description: "This is a function to run"},
70+
{Name: "f2", Description: ""},
71+
})
72+
2673
}

shell/zsh.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func newZshParser() *zshParser {
1616
DefineTokens(tokenCurlyClose, []string{"}"}).
1717
DefineTokens(tokenParenOpen, []string{"("}).
1818
DefineTokens(tokenParenClose, []string{")"}).
19-
DefineTokens(tokenFunction, []string{"function "}).
19+
DefineTokens(tokenFunction, []string{"function"}).
2020
DefineTokens(tokenComment, []string{"#"})
2121
return zshParser
2222
}
@@ -47,7 +47,7 @@ func (zshParser *zshParser) analyzer(stream *tokenizer.Stream) ([]Function, erro
4747
currentToken := stream.CurrentToken()
4848
acc := ""
4949
for {
50-
if stream.CurrentToken().Line() != currentToken.Line() || stream.CurrentToken().Key() == tokenFunction {
50+
if stream.CurrentToken().Line() != currentToken.Line() || (stream.CurrentToken().Key() == tokenFunction && stream.CurrentToken().Offset()+len(stream.CurrentToken().ValueString()) != stream.NextToken().Offset() && stream.CurrentToken().Line() != stream.PrevToken().Line()) {
5151
break
5252
}
5353
acc = stream.CurrentToken().ValueString() + acc

0 commit comments

Comments
 (0)