Emit `SyntaxWarning` for an invalid escape sequence. `warn_invalid_escape_sequence()` in `Parser/string_parser.c`
(
source: &str,
ch: char,
offset: usize,
filename: &str,
vm: &VirtualMachine,
)
| 173 | /// |
| 174 | /// `warn_invalid_escape_sequence()` in `Parser/string_parser.c` |
| 175 | fn warn_invalid_escape_sequence( |
| 176 | source: &str, |
| 177 | ch: char, |
| 178 | offset: usize, |
| 179 | filename: &str, |
| 180 | vm: &VirtualMachine, |
| 181 | ) { |
| 182 | let lineno = line_number_at(source, offset); |
| 183 | let message = vm.ctx.new_str(format!( |
| 184 | "\"\\{ch}\" is an invalid escape sequence. \ |
| 185 | Such sequences will not work in the future. \ |
| 186 | Did you mean \"\\\\{ch}\"? A raw string is also an option." |
| 187 | )); |
| 188 | let fname = vm.ctx.new_str(filename); |
| 189 | let _ = warn::warn_explicit( |
| 190 | Some(vm.ctx.exceptions.syntax_warning.to_owned()), |
| 191 | message.into(), |
| 192 | fname, |
| 193 | lineno, |
| 194 | None, |
| 195 | vm.ctx.none(), |
| 196 | None, |
| 197 | None, |
| 198 | vm, |
| 199 | ); |
| 200 | } |
| 201 | |
| 202 | struct EscapeWarningVisitor<'a> { |
| 203 | source: &'a str, |
no test coverage detected