MCPcopy Create free account
hub / github.com/colbymchenry/codegraph / strip_c

Function strip_c

codegraph-kernel/src/cfnptr.rs:210–267  ·  view source on GitHub ↗

Port of `stripCStyle(src, /*allowSingleQuoteStrings*/ false)`: `/* */` and `//` comments blanked to spaces (newlines preserved), `"` and backtick string interiors skipped verbatim (backtick spans lines — the JS helper treats it as a template literal even for C), `'` NOT special. Blanking is per UTF-16 CODE UNIT (one space per BMP char, two per astral char), so the result equals the JS stripper's

(src: &[u8])

Source from the content-addressed store, hash-verified

208/// see, and the strip differential oracle pins byte equality directly.
209/// (Comment boundaries — `/*`, `*/`, `//`, quotes, `\n` — are all ASCII, so
210/// the state machine's byte positions always land on char boundaries.)
211pub fn strip_c(src: &[u8]) -> Vec<u8> {
212 let n = src.len();
213 let mut out = Vec::with_capacity(n);
214 let mut copied = 0usize; // src[..copied] already emitted
215 let mut i = 0;
216 {
217 let mut blank_to = |out: &mut Vec<u8>, start: usize, end: usize| {
218 out.extend_from_slice(&src[copied..start]);
219 emit_blank(out, &src[start..end]);
220 copied = end;
221 };
222 while i < n {
223 let c = src[i];
224 let c2 = if i + 1 < n { src[i + 1] } else { 0 };
225 if c == b'/' && c2 == b'*' {
226 let start = i;
227 i += 2;
228 while i < n && !(src[i] == b'*' && i + 1 < n && src[i + 1] == b'/') {
229 i += 1;
230 }
231 if i < n {
232 i += 2;
233 }
234 blank_to(&mut out, start, i.min(n));
235 continue;
236 }
237 if c == b'/' && c2 == b'/' {
238 let start = i;
239 while i < n && src[i] != b'\n' {
240 i += 1;
241 }
242 blank_to(&mut out, start, i);
243 continue;
244 }
245 if c == b'"' || c == b'`' {
246 let quote = c;
247 i += 1;
248 while i < n && src[i] != quote {
249 if src[i] == b'\\' && i + 1 < n {
250 i += 2;
251 continue;
252 }
253 if quote != b'`' && src[i] == b'\n' {
254 break;
255 }
256 i += 1;
257 }
258 if i < n && src[i] == quote {
259 i += 1;
260 }
261 continue;
262 }
263 i += 1;
264 }
265 }
266 out.extend_from_slice(&src[copied..]);
267 out

Callers 3

cfnptr_strip_cFunction · 0.85
scan_fileFunction · 0.85

Calls 2

emit_blankFunction · 0.85
lenMethod · 0.80

Tested by 1