MCPcopy Create free account
hub / github.com/claude-code-best/claude-code / scanHeredocBodies

Function scanHeredocBodies

src/utils/bash/bashParser.ts:1881–1923  ·  view source on GitHub ↗
(P: ParseState)

Source from the content-addressed store, hash-verified

1879}
1880
1881function scanHeredocBodies(P: ParseState): void {
1882 // Skip to newline if not already there
1883 while (P.L.i < P.L.len && P.L.src[P.L.i] !== '\n') advance(P.L)
1884 if (P.L.i < P.L.len) advance(P.L)
1885 for (const hd of P.L.heredocs) {
1886 hd.bodyStart = P.L.b
1887 const delimLen = hd.delim.length
1888 while (P.L.i < P.L.len) {
1889 const lineStart = P.L.i
1890 const lineStartB = P.L.b
1891 // Skip leading tabs if <<-
1892 let checkI = lineStart
1893 if (hd.stripTabs) {
1894 while (checkI < P.L.len && P.L.src[checkI] === '\t') checkI++
1895 }
1896 // Check if this line is the delimiter
1897 if (
1898 P.L.src.startsWith(hd.delim, checkI) &&
1899 (checkI + delimLen >= P.L.len ||
1900 P.L.src[checkI + delimLen] === '\n' ||
1901 P.L.src[checkI + delimLen] === '\r')
1902 ) {
1903 hd.bodyEnd = lineStartB
1904 // Advance past tabs
1905 while (P.L.i < checkI) advance(P.L)
1906 hd.endStart = P.L.b
1907 // Advance past delimiter
1908 for (let k = 0; k < delimLen; k++) advance(P.L)
1909 hd.endEnd = P.L.b
1910 // Skip trailing newline
1911 if (P.L.i < P.L.len && P.L.src[P.L.i] === '\n') advance(P.L)
1912 return
1913 }
1914 // Consume line
1915 while (P.L.i < P.L.len && P.L.src[P.L.i] !== '\n') advance(P.L)
1916 if (P.L.i < P.L.len) advance(P.L)
1917 }
1918 // Unterminated
1919 hd.bodyEnd = P.L.b
1920 hd.endStart = P.L.b
1921 hd.endEnd = P.L.b
1922 }
1923}
1924
1925function parseHeredocBodyContent(
1926 P: ParseState,

Callers 2

parseStatementsFunction · 0.85
parseSimpleCommandFunction · 0.85

Calls 1

advanceFunction · 0.85

Tested by

no test coverage detected