Reads a quoted or dotted spec; returns (spec, span) for diagnostics. */
(&mut self)
| 60 | |
| 61 | /* Reads a quoted or dotted spec; returns (spec, span) for diagnostics. */ |
| 62 | fn read_module_spec(&mut self) -> (String, (usize, usize)) { |
| 63 | if matches!(self.peek(), Some(TokenType::String)) { |
| 64 | let t = self.advance(); |
| 65 | let raw = self.lexeme(&t).to_string(); |
| 66 | let unquoted = parse_string(&raw); |
| 67 | (unquoted, (t.start, t.end)) |
| 68 | } else { |
| 69 | let first = self.advance(); |
| 70 | let mut name = self.lexeme(&first).to_string(); |
| 71 | let mut span = (first.start, first.end); |
| 72 | while self.eat_if(TokenType::Dot) { |
| 73 | let next = self.advance(); |
| 74 | name.push('.'); |
| 75 | name.push_str(self.lexeme(&next)); |
| 76 | span.1 = next.end; |
| 77 | } |
| 78 | (name, span) |
| 79 | } |
| 80 | } |
| 81 | |
| 82 | /* Verifies #sha256 fragment then resolves; parser re-hashes bytes as defence-in-depth. Returns clean URL. */ |
| 83 | fn resolve_with_integrity(&mut self, spec: &str) -> Result<(String, Resolved), String> { |
no test coverage detected