MCPcopy Index your code
hub / github.com/claude-code-best/claude-code / parseSimpleCommand

Function parseSimpleCommand

src/utils/bash/bashParser.ts:1137–1400  ·  view source on GitHub ↗

* Parse a simple command: [assignment]* word [arg|redirect]* * Returns variable_assignment if only one assignment and no command.

(P: ParseState)

Source from the content-addressed store, hash-verified

1135 * Returns variable_assignment if only one assignment and no command.
1136 */
1137function parseSimpleCommand(P: ParseState): TsNode | null {
1138 const start = P.L.b
1139 const assignments: TsNode[] = []
1140 const preRedirects: TsNode[] = []
1141
1142 while (true) {
1143 skipBlanks(P.L)
1144 const a = tryParseAssignment(P)
1145 if (a) {
1146 assignments.push(a)
1147 continue
1148 }
1149 const r = tryParseRedirect(P)
1150 if (r) {
1151 preRedirects.push(r)
1152 continue
1153 }
1154 break
1155 }
1156
1157 skipBlanks(P.L)
1158 const save = saveLex(P.L)
1159 const nameTok = nextToken(P.L, 'cmd')
1160 if (
1161 nameTok.type === 'EOF' ||
1162 nameTok.type === 'NEWLINE' ||
1163 nameTok.type === 'COMMENT' ||
1164 (nameTok.type === 'OP' &&
1165 nameTok.value !== '{' &&
1166 nameTok.value !== '[' &&
1167 nameTok.value !== '[[') ||
1168 (nameTok.type === 'WORD' &&
1169 SHELL_KEYWORDS.has(nameTok.value) &&
1170 nameTok.value !== 'in')
1171 ) {
1172 restoreLex(P.L, save)
1173 // No command — standalone assignment(s) or redirect
1174 if (assignments.length === 1 && preRedirects.length === 0) {
1175 return assignments[0]!
1176 }
1177 if (preRedirects.length > 0 && assignments.length === 0) {
1178 // Bare redirect → redirected_statement with just file_redirect children
1179 const last = preRedirects[preRedirects.length - 1]!
1180 return mk(
1181 P,
1182 'redirected_statement',
1183 preRedirects[0]!.startIndex,
1184 last.endIndex,
1185 preRedirects,
1186 )
1187 }
1188 if (assignments.length > 1 && preRedirects.length === 0) {
1189 // `A=1 B=2` with no command → variable_assignments (plural)
1190 const last = assignments[assignments.length - 1]!
1191 return mk(
1192 P,
1193 'variable_assignments',
1194 assignments[0]!.startIndex,

Callers 1

parseCommandFunction · 0.85

Calls 15

skipBlanksFunction · 0.85
tryParseAssignmentFunction · 0.85
tryParseRedirectFunction · 0.85
saveLexFunction · 0.85
nextTokenFunction · 0.85
restoreLexFunction · 0.85
parseWordFunction · 0.85
leafFunction · 0.85
skipNewlinesFunction · 0.85
parseStatementsFunction · 0.85
scanHeredocBodiesFunction · 0.85
parseHeredocBodyContentFunction · 0.85

Tested by

no test coverage detected