function childAtIndex()

in packages/shell-parser/src/parser.ts [277:311]


function childAtIndex(
  str: string,
  index: number,
  inString: boolean,
  terminators: string[],
): LiteralNode | null {
  const lookahead = [
    str.charAt(index),
    str.charAt(index + 1),
    str.charAt(index + 2),
  ];
  switch (lookahead[0]) {
    case "$":
      if (lookahead[1] === "(") {
        return lookahead[2] === "("
          ? parseArithmeticExpansion(str, index)
          : parseCommandSubstitution(str, index, ")");
      }
      if (lookahead[1] === "{") {
        return parseExpansion(str, index);
      }
      if (!inString && lookahead[1] === "'") {
        return parseAnsiCString(str, index);
      }
      return parseSimpleExpansion(str, index, terminators);
    case "`":
      return parseCommandSubstitution(str, index, "`");
    case "'":
      return inString ? null : parseRawString(str, index);
    case '"':
      return inString ? null : parseString(str, index);
    default:
      return null;
  }
}