diff options
| author | bors <bors@rust-lang.org> | 2022-11-19 15:40:04 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-11-19 15:40:04 +0000 |
| commit | 2a434286a96d61e9f55a3144004beec48206bb29 (patch) | |
| tree | 3d4039fc786f07f1da07322c110b258909d78c18 /compiler/rustc_span/src/source_map.rs | |
| parent | 62c627c7a3a9b3e193a5ae6e1ec7348bc5136301 (diff) | |
| parent | f69f4cb19cb315537b40468d061579f43b62dd8f (diff) | |
| download | rust-2a434286a96d61e9f55a3144004beec48206bb29.tar.gz rust-2a434286a96d61e9f55a3144004beec48206bb29.zip | |
Auto merge of #104607 - matthiaskrgr:rollup-9s589me, r=matthiaskrgr
Rollup of 10 pull requests Successful merges: - #103117 (Use `IsTerminal` in place of `atty`) - #103969 (Partial support for running UI tests with `download-rustc`) - #103989 (Fix build of std for thumbv7a-pc-windows-msvc) - #104076 (fix sysroot issue which appears for ci downloaded rustc) - #104469 (Make "long type" printing type aware and trim types in E0275) - #104497 (detect () to avoid redundant <> suggestion for type) - #104577 (Don't focus on notable trait parent when hiding it) - #104587 (Update cargo) - #104593 (Improve spans for RPITIT object-safety errors) - #104604 (Migrate top buttons style to CSS variables) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_span/src/source_map.rs')
| -rw-r--r-- | compiler/rustc_span/src/source_map.rs | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/compiler/rustc_span/src/source_map.rs b/compiler/rustc_span/src/source_map.rs index 7ea028b12ef..e8d129d733c 100644 --- a/compiler/rustc_span/src/source_map.rs +++ b/compiler/rustc_span/src/source_map.rs @@ -753,10 +753,11 @@ impl SourceMap { } } - /// Given a 'Span', tries to tell if the next character is '>' - /// and the previous charactoer is '<' after skipping white space - /// return true if wrapped by '<>' - pub fn span_wrapped_by_angle_bracket(&self, span: Span) -> bool { + /// Given a 'Span', tries to tell if it's wrapped by "<>" or "()" + /// the algorithm searches if the next character is '>' or ')' after skipping white space + /// then searches the previous charactoer to match '<' or '(' after skipping white space + /// return true if wrapped by '<>' or '()' + pub fn span_wrapped_by_angle_or_parentheses(&self, span: Span) -> bool { self.span_to_source(span, |src, start_index, end_index| { if src.get(start_index..end_index).is_none() { return Ok(false); @@ -764,11 +765,17 @@ impl SourceMap { // test the right side to match '>' after skipping white space let end_src = &src[end_index..]; let mut i = 0; + let mut found_right_parentheses = false; + let mut found_right_angle = false; while let Some(cc) = end_src.chars().nth(i) { if cc == ' ' { i = i + 1; } else if cc == '>' { // found > in the right; + found_right_angle = true; + break; + } else if cc == ')' { + found_right_parentheses = true; break; } else { // failed to find '>' return false immediately @@ -786,6 +793,16 @@ impl SourceMap { i = i - 1; } else if cc == '<' { // found < in the left + if !found_right_angle { + // skip something like "(< )>" + return Ok(false); + } + break; + } else if cc == '(' { + if !found_right_parentheses { + // skip something like "<(>)" + return Ok(false); + } break; } else { // failed to find '<' return false immediately |
