diff options
| author | bors <bors@rust-lang.org> | 2023-08-25 07:02:01 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-08-25 07:02:01 +0000 |
| commit | 4535d33e337104e7961ca7f2086627cbb07919dd (patch) | |
| tree | 9f14e509b5c90ab2617c11b372d7014f73c9a07d /compiler/rustc_errors/src | |
| parent | c9228aeaba61f57d425593f4cbbc26e4a6750a9d (diff) | |
| parent | 021e882c34e29a977e079f6be918fdc8d4e6f61f (diff) | |
| download | rust-4535d33e337104e7961ca7f2086627cbb07919dd.tar.gz rust-4535d33e337104e7961ca7f2086627cbb07919dd.zip | |
Auto merge of #115204 - matthiaskrgr:rollup-avsp3t3, r=matthiaskrgr
Rollup of 5 pull requests Successful merges: - #114754 (Name what ln_gamma does) - #115081 (Allow overwriting ExpnId for concurrent decoding) - #115151 (Fix CFI: f32 and f64 are encoded incorrectly for cross-language CFI) - #115169 (remove some unnecessary ignore-debug clauses) - #115190 (Add comment to the push_trailing function) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_errors/src')
| -rw-r--r-- | compiler/rustc_errors/src/lib.rs | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/compiler/rustc_errors/src/lib.rs b/compiler/rustc_errors/src/lib.rs index db5df554d23..b7e1b0c8ad1 100644 --- a/compiler/rustc_errors/src/lib.rs +++ b/compiler/rustc_errors/src/lib.rs @@ -197,8 +197,14 @@ impl CodeSuggestion { use rustc_span::{CharPos, Pos}; - /// Append to a buffer the remainder of the line of existing source code, and return the - /// count of lines that have been added for accurate highlighting. + /// Extracts a substring from the provided `line_opt` based on the specified low and high indices, + /// appends it to the given buffer `buf`, and returns the count of newline characters in the substring + /// for accurate highlighting. + /// If `line_opt` is `None`, a newline character is appended to the buffer, and 0 is returned. + /// + /// ## Returns + /// + /// The count of newline characters in the extracted substring. fn push_trailing( buf: &mut String, line_opt: Option<&Cow<'_, str>>, @@ -206,22 +212,30 @@ impl CodeSuggestion { hi_opt: Option<&Loc>, ) -> usize { let mut line_count = 0; + // Convert CharPos to Usize, as CharPose is character offset + // Extract low index and high index let (lo, hi_opt) = (lo.col.to_usize(), hi_opt.map(|hi| hi.col.to_usize())); if let Some(line) = line_opt { if let Some(lo) = line.char_indices().map(|(i, _)| i).nth(lo) { + // Get high index while account for rare unicode and emoji with char_indices let hi_opt = hi_opt.and_then(|hi| line.char_indices().map(|(i, _)| i).nth(hi)); match hi_opt { + // If high index exist, take string from low to high index Some(hi) if hi > lo => { + // count how many '\n' exist line_count = line[lo..hi].matches('\n').count(); buf.push_str(&line[lo..hi]) } Some(_) => (), + // If high index absence, take string from low index till end string.len None => { + // count how many '\n' exist line_count = line[lo..].matches('\n').count(); buf.push_str(&line[lo..]) } } } + // If high index is None if hi_opt.is_none() { buf.push('\n'); } |
