let token = sema.descend_into_macros(token.clone());
let parent = token.parent();
- // Check if macro takes a format string and remeber it for highlighting later.
+ // Check if macro takes a format string and remember it for highlighting later.
// The macros that accept a format string expand to a compiler builtin macros
// `format_args` and `format_args_nl`.
if let Some(fmt_macro_call) = parent.parent().and_then(ast::MacroCall::cast) {
}
}
- let is_format_string =
- format_string.as_ref().map(|fs| fs == &element_to_highlight).unwrap_or_default();
+ let is_format_string = format_string.as_ref() == Some(&element_to_highlight);
if let Some((highlight, binding_hash)) =
highlight_element(&sema, &mut bindings_shadow_count, element_to_highlight.clone())
{
stack.push();
if is_format_string {
- string.lex_format_specifier(&mut |piece_range, kind| {
+ string.lex_format_specifier(|piece_range, kind| {
let highlight = match kind {
FormatSpecifier::Open
| FormatSpecifier::Close
}
pub trait HasFormatSpecifier: AstToken {
- fn lex_format_specifier<F>(&self, callback: &mut F)
+ fn lex_format_specifier<F>(&self, mut callback: F)
where
F: FnMut(TextRange, FormatSpecifier),
{
FormatSpecifier::Open,
);
- let next_char = if let Some(c) = chars.clone().next() {
- c
- } else {
- break;
- };
-
// check for integer/identifier
- match next_char {
+ match chars.clone().next().unwrap_or_default() {
'0'..='9' => {
// integer
- read_integer(&mut chars, initial_len, callback);
+ read_integer(&mut chars, initial_len, &mut callback);
}
'a'..='z' | 'A'..='Z' | '_' => {
// identifier
- read_identifier(&mut chars, initial_len, callback);
+ read_identifier(&mut chars, initial_len, &mut callback);
}
_ => {}
}
&mut chars,
initial_len,
FormatSpecifier::Colon,
- callback,
+ &mut callback,
);
// check for fill/align
&mut chars,
initial_len,
FormatSpecifier::Fill,
- callback,
+ &mut callback,
);
skip_char_and_emit(
&mut chars,
initial_len,
FormatSpecifier::Align,
- callback,
+ &mut callback,
);
}
_ => match first {
&mut chars,
initial_len,
FormatSpecifier::Align,
- callback,
+ &mut callback,
);
}
_ => {}
&mut chars,
initial_len,
FormatSpecifier::Sign,
- callback,
+ &mut callback,
);
}
_ => {}
&mut chars,
initial_len,
FormatSpecifier::NumberSign,
- callback,
+ &mut callback,
);
}
&mut chars,
initial_len,
FormatSpecifier::Zero,
- callback,
+ &mut callback,
);
}
// width
match chars.clone().next().unwrap_or_default() {
'0'..='9' => {
- read_integer(&mut chars, initial_len, callback);
+ read_integer(&mut chars, initial_len, &mut callback);
if chars.clone().next() == Some('$') {
skip_char_and_emit(
&mut chars,
initial_len,
FormatSpecifier::DollarSign,
- callback,
+ &mut callback,
);
}
}
'a'..='z' | 'A'..='Z' | '_' => {
- read_identifier(&mut chars, initial_len, callback);
+ read_identifier(&mut chars, initial_len, &mut callback);
if chars.clone().next() != Some('$') {
continue;
}
&mut chars,
initial_len,
FormatSpecifier::DollarSign,
- callback,
+ &mut callback,
);
}
_ => {}
&mut chars,
initial_len,
FormatSpecifier::Dot,
- callback,
+ &mut callback,
);
match chars.clone().next().unwrap_or_default() {
&mut chars,
initial_len,
FormatSpecifier::Asterisk,
- callback,
+ &mut callback,
);
}
'0'..='9' => {
- read_integer(&mut chars, initial_len, callback);
+ read_integer(&mut chars, initial_len, &mut callback);
if chars.clone().next() == Some('$') {
skip_char_and_emit(
&mut chars,
initial_len,
FormatSpecifier::DollarSign,
- callback,
+ &mut callback,
);
}
}
'a'..='z' | 'A'..='Z' | '_' => {
- read_identifier(&mut chars, initial_len, callback);
+ read_identifier(&mut chars, initial_len, &mut callback);
if chars.clone().next() != Some('$') {
continue;
}
&mut chars,
initial_len,
FormatSpecifier::DollarSign,
- callback,
+ &mut callback,
);
}
_ => {
&mut chars,
initial_len,
FormatSpecifier::QuestionMark,
- callback,
+ &mut callback,
);
}
'a'..='z' | 'A'..='Z' | '_' => {
- read_identifier(&mut chars, initial_len, callback);
+ read_identifier(&mut chars, initial_len, &mut callback);
}
_ => {}
}
// Escaped format end specifier, `}}`
continue;
}
- skip_char_and_emit(&mut chars, initial_len, FormatSpecifier::Close, callback);
+ skip_char_and_emit(
+ &mut chars,
+ initial_len,
+ FormatSpecifier::Close,
+ &mut callback,
+ );
}
_ => {
while let Some(next_char) = chars.clone().next() {