MCPcopy Create free account
hub / github.com/AnukarOP/claude-code-leaked / parseSimpleCommand

Function parseSimpleCommand

source code/utils/bash/bashParser.ts:1143–1406  ·  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

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

Tested by

no test coverage detected