MCPcopy
hub / github.com/lmorg/murex / parseFunctionParameters

Method parseFunctionParameters

lang/expressions/parse_function.go:63–255  ·  view source on GitHub ↗
(cmd []rune)

Source from the content-addressed store, hash-verified

61}
62
63func (tree *ParserT) parseFunctionParameters(cmd []rune) ([]rune, error) {
64 var escape bool
65 start := tree.charPos
66 tree.charPos++
67
68 for ; tree.charPos < len(tree.expression); tree.charPos++ {
69 r := tree.expression[tree.charPos]
70
71 if escape {
72 if r == '\n' {
73 return nil, errNotAllowedInFunctions(cmd, "escaped line endings", []rune(`\\n`)...)
74 }
75
76 escape = false
77 continue
78 }
79
80 switch r {
81 case '#':
82 return nil, errNotAllowedInFunctions(cmd, "line comments", r)
83
84 case '/':
85 if tree.nextChar() == '#' {
86 if err := tree.parseCommentMultiLine(); err != nil {
87 return nil, err
88 }
89 }
90
91 case '\\':
92 escape = true
93
94 case ' ', '\t', '\r':
95 // whitespace. do nothing
96
97 case '\n':
98 // '\' escaped used at end of line
99 return nil, errNotAllowedInFunctions(cmd, "line feeds", []rune(`\n`)...)
100
101 case '?':
102 prev := tree.prevChar()
103 next := tree.nextChar()
104 if prev != ' ' && prev != '\t' &&
105 next != ' ' && next != '\t' {
106 continue
107 }
108 return nil, errNotAllowedInFunctions(cmd, "STDERR pipes", r)
109
110 case ';':
111 return nil, errNotAllowedInFunctions(cmd, "command terminators", r)
112
113 case '|':
114 if tree.nextChar() == '|' {
115 return nil, errNotAllowedInFunctions(cmd, "logical operators", []rune(`||`)...)
116 }
117 return nil, errNotAllowedInFunctions(cmd, "pipes", r)
118
119 case '&':
120 if tree.nextChar() == '&' {

Callers 1

parseFunctionMethod · 0.95

Calls 15

nextCharMethod · 0.95
parseCommentMultiLineMethod · 0.95
prevCharMethod · 0.95
parseParenthesisMethod · 0.95
parseArrayMethod · 0.95
parseObjectMethod · 0.95
parseBlockQuoteMethod · 0.95
parseStringMethod · 0.95
parseSubShellMethod · 0.95
parseVarScalarMethod · 0.95
parseVarArrayMethod · 0.95
errNotAllowedInFunctionsFunction · 0.85

Tested by

no test coverage detected