mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 12:29:21 +00:00
Add tests for convert integer literal assist
This commit is contained in:
parent
91b4746c01
commit
b2bfadb52c
1 changed files with 570 additions and 4 deletions
|
@ -86,10 +86,7 @@ impl IntegerLiteralBase {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Checks that all characters after the base prefix are all valid digits for that base.
|
// Checks that all characters after the base prefix are all valid digits for that base.
|
||||||
if literal_text[base.prefix_len()..]
|
if literal_text[base.prefix_len()..].chars().all(|c| c.is_digit(base.base())) {
|
||||||
.chars()
|
|
||||||
.all(|c| c.is_digit(base.base()))
|
|
||||||
{
|
|
||||||
Some(base)
|
Some(base)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
|
@ -133,3 +130,572 @@ impl IntegerLiteralBase {
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
|
||||||
|
use super::*;
|
||||||
|
use crate::tests::{check_assist_by_label, check_assist_target};
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn binary_target() {
|
||||||
|
check_assist_target(convert_integer_literal, "const _: i32 = 0b1010<|>;", "0b1010");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn octal_target() {
|
||||||
|
check_assist_target(convert_integer_literal, "const _: i32 = 0o12<|>;", "0o12");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn decimal_target() {
|
||||||
|
check_assist_target(convert_integer_literal, "const _: i32 = 10<|>;", "10");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn hexadecimal_target() {
|
||||||
|
check_assist_target(convert_integer_literal, "const _: i32 = 0xA<|>;", "0xA");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn binary_target_with_underscores() {
|
||||||
|
check_assist_target(convert_integer_literal, "const _: i32 = 0b10_10<|>;", "0b10_10");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn octal_target_with_underscores() {
|
||||||
|
check_assist_target(convert_integer_literal, "const _: i32 = 0o1_2<|>;", "0o1_2");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn decimal_target_with_underscores() {
|
||||||
|
check_assist_target(convert_integer_literal, "const _: i32 = 1_0<|>;", "1_0");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn hexadecimal_target_with_underscores() {
|
||||||
|
check_assist_target(convert_integer_literal, "const _: i32 = 0x_A<|>;", "0x_A");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_decimal_integer() {
|
||||||
|
let before = "const _: i32 = 1000<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b1111101000;",
|
||||||
|
"Convert 1000 to 0b1111101000",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o1750;",
|
||||||
|
"Convert 1000 to 0o1750",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0x3E8;",
|
||||||
|
"Convert 1000 to 0x3E8",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decimal numbers under 3 digits have a special case where they return early because we can't fit a
|
||||||
|
// other base's prefix, so we have a separate test for that.
|
||||||
|
#[test]
|
||||||
|
fn convert_small_decimal_integer() {
|
||||||
|
let before = "const _: i32 = 10<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b1010;",
|
||||||
|
"Convert 10 to 0b1010",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o12;",
|
||||||
|
"Convert 10 to 0o12",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0xA;",
|
||||||
|
"Convert 10 to 0xA",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_hexadecimal_integer() {
|
||||||
|
let before = "const _: i32 = 0xFF<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b11111111;",
|
||||||
|
"Convert 0xFF to 0b11111111",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o377;",
|
||||||
|
"Convert 0xFF to 0o377",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 255;",
|
||||||
|
"Convert 0xFF to 255",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_binary_integer() {
|
||||||
|
let before = "const _: i32 = 0b11111111<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o377;",
|
||||||
|
"Convert 0b11111111 to 0o377",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 255;",
|
||||||
|
"Convert 0b11111111 to 255",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0xFF;",
|
||||||
|
"Convert 0b11111111 to 0xFF",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_octal_integer() {
|
||||||
|
let before = "const _: i32 = 0o377<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b11111111;",
|
||||||
|
"Convert 0o377 to 0b11111111",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 255;",
|
||||||
|
"Convert 0o377 to 255",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0xFF;",
|
||||||
|
"Convert 0o377 to 0xFF",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_decimal_integer_with_underscores() {
|
||||||
|
let before = "const _: i32 = 1_00_0<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b1111101000;",
|
||||||
|
"Convert 1000 to 0b1111101000",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o1750;",
|
||||||
|
"Convert 1000 to 0o1750",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0x3E8;",
|
||||||
|
"Convert 1000 to 0x3E8",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_small_decimal_integer_with_underscores() {
|
||||||
|
let before = "const _: i32 = 1_0<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b1010;",
|
||||||
|
"Convert 10 to 0b1010",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o12;",
|
||||||
|
"Convert 10 to 0o12",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0xA;",
|
||||||
|
"Convert 10 to 0xA",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_hexadecimal_integer_with_underscores() {
|
||||||
|
let before = "const _: i32 = 0x_F_F<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b11111111;",
|
||||||
|
"Convert 0xFF to 0b11111111",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o377;",
|
||||||
|
"Convert 0xFF to 0o377",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 255;",
|
||||||
|
"Convert 0xFF to 255",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_binary_integer_with_underscores() {
|
||||||
|
let before = "const _: i32 = 0b1111_1111<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o377;",
|
||||||
|
"Convert 0b11111111 to 0o377",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 255;",
|
||||||
|
"Convert 0b11111111 to 255",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0xFF;",
|
||||||
|
"Convert 0b11111111 to 0xFF",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_octal_integer_with_underscores() {
|
||||||
|
let before = "const _: i32 = 0o3_77<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b11111111;",
|
||||||
|
"Convert 0o377 to 0b11111111",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 255;",
|
||||||
|
"Convert 0o377 to 255",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0xFF;",
|
||||||
|
"Convert 0o377 to 0xFF",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_decimal_integer_with_suffix() {
|
||||||
|
let before = "const _: i32 = 1000i32<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b1111101000i32;",
|
||||||
|
"Convert 1000 (i32) to 0b1111101000",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o1750i32;",
|
||||||
|
"Convert 1000 (i32) to 0o1750",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0x3E8i32;",
|
||||||
|
"Convert 1000 (i32) to 0x3E8",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_small_decimal_integer_with_suffix() {
|
||||||
|
let before = "const _: i32 = 10i32<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b1010i32;",
|
||||||
|
"Convert 10 (i32) to 0b1010",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o12i32;",
|
||||||
|
"Convert 10 (i32) to 0o12",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0xAi32;",
|
||||||
|
"Convert 10 (i32) to 0xA",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_hexadecimal_integer_with_suffix() {
|
||||||
|
let before = "const _: i32 = 0xFFi32<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b11111111i32;",
|
||||||
|
"Convert 0xFF (i32) to 0b11111111",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o377i32;",
|
||||||
|
"Convert 0xFF (i32) to 0o377",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 255i32;",
|
||||||
|
"Convert 0xFF (i32) to 255",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_binary_integer_with_suffix() {
|
||||||
|
let before = "const _: i32 = 0b11111111i32<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o377i32;",
|
||||||
|
"Convert 0b11111111 (i32) to 0o377",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 255i32;",
|
||||||
|
"Convert 0b11111111 (i32) to 255",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0xFFi32;",
|
||||||
|
"Convert 0b11111111 (i32) to 0xFF",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_octal_integer_with_suffix() {
|
||||||
|
let before = "const _: i32 = 0o377i32<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b11111111i32;",
|
||||||
|
"Convert 0o377 (i32) to 0b11111111",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 255i32;",
|
||||||
|
"Convert 0o377 (i32) to 255",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0xFFi32;",
|
||||||
|
"Convert 0o377 (i32) to 0xFF",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_decimal_integer_with_underscores_and_suffix() {
|
||||||
|
let before = "const _: i32 = 1_00_0i32<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b1111101000i32;",
|
||||||
|
"Convert 1000 (i32) to 0b1111101000",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o1750i32;",
|
||||||
|
"Convert 1000 (i32) to 0o1750",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0x3E8i32;",
|
||||||
|
"Convert 1000 (i32) to 0x3E8",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_small_decimal_integer_with_underscores_and_suffix() {
|
||||||
|
let before = "const _: i32 = 1_0i32<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b1010i32;",
|
||||||
|
"Convert 10 (i32) to 0b1010",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o12i32;",
|
||||||
|
"Convert 10 (i32) to 0o12",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0xAi32;",
|
||||||
|
"Convert 10 (i32) to 0xA",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_hexadecimal_integer_with_underscores_and_suffix() {
|
||||||
|
let before = "const _: i32 = 0x_F_Fi32<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b11111111i32;",
|
||||||
|
"Convert 0xFF (i32) to 0b11111111",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o377i32;",
|
||||||
|
"Convert 0xFF (i32) to 0o377",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 255i32;",
|
||||||
|
"Convert 0xFF (i32) to 255",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_binary_integer_with_underscores_and_suffix() {
|
||||||
|
let before = "const _: i32 = 0b1111_1111i32<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0o377i32;",
|
||||||
|
"Convert 0b11111111 (i32) to 0o377",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 255i32;",
|
||||||
|
"Convert 0b11111111 (i32) to 255",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0xFFi32;",
|
||||||
|
"Convert 0b11111111 (i32) to 0xFF",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn convert_octal_integer_with_underscores_and_suffix() {
|
||||||
|
let before = "const _: i32 = 0o3_77i32<|>;";
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0b11111111i32;",
|
||||||
|
"Convert 0o377 (i32) to 0b11111111",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 255i32;",
|
||||||
|
"Convert 0o377 (i32) to 255",
|
||||||
|
);
|
||||||
|
|
||||||
|
check_assist_by_label(
|
||||||
|
convert_integer_literal,
|
||||||
|
before,
|
||||||
|
"const _: i32 = 0xFFi32;",
|
||||||
|
"Convert 0o377 (i32) to 0xFF",
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue