diff --git a/crates/ide_completion/src/tests/sourcegen.rs b/crates/ide_completion/src/tests/sourcegen.rs index 770af55b9b4..face0c27fcc 100644 --- a/crates/ide_completion/src/tests/sourcegen.rs +++ b/crates/ide_completion/src/tests/sourcegen.rs @@ -14,8 +14,9 @@ #[test] #[ignore] fn sourcegen_lint_completions() { - if !project_root().join("./target/rust").exists() { - cmd!("git clone --depth=1 https://github.com/rust-lang/rust ./target/rust").run().unwrap(); + let rust_repo = project_root().join("./target/rust"); + if !rust_repo.exists() { + cmd!("git clone --depth=1 https://github.com/rust-lang/rust {rust_repo}").run().unwrap(); } let mut contents = r" @@ -33,6 +34,7 @@ pub struct Lint { cmd!("curl https://rust-lang.github.io/rust-clippy/master/lints.json --output ./target/clippy_lints.json").run().unwrap(); generate_descriptor_clippy(&mut contents, Path::new("./target/clippy_lints.json")); + let contents = sourcegen::add_preamble("sourcegen_lint_completions", sourcegen::reformat(contents)); @@ -93,11 +95,10 @@ fn generate_feature_descriptor(buf: &mut String, src_dir: PathBuf) { .collect::>(); features.sort_by(|(feature_ident, _), (feature_ident2, _)| feature_ident.cmp(feature_ident2)); + buf.push_str(r#"pub const FEATURES: &[Lint] = &["#); for (feature_ident, doc) in features.into_iter() { push_lint_completion(buf, &feature_ident, &doc) } - - buf.push_str(r#"pub const FEATURES: &[Lint] = &["#); buf.push('\n'); buf.push_str("];\n"); } diff --git a/crates/ide_db/src/helpers/generated_lints.rs b/crates/ide_db/src/helpers/generated_lints.rs index 55438749bdd..4ec63a234b0 100644 --- a/crates/ide_db/src/helpers/generated_lints.rs +++ b/crates/ide_db/src/helpers/generated_lints.rs @@ -1,10 +1,9 @@ -//! Generated file, do not edit by hand, see `xtask/src/codegen` +//! Generated by `sourcegen_lint_completions`, do not edit by hand. pub struct Lint { pub label: &'static str, pub description: &'static str, } - pub const DEFAULT_LINTS: &[Lint] = &[ Lint { label: "absolute_paths_not_starting_with_crate", @@ -71,8 +70,8 @@ pub struct Lint { description: r##"detects when an null pointer is dereferenced"##, }, Lint { - label: "disjoint_capture_migration", - description: r##"Drop reorder and auto traits error because of `capture_disjoint_fields`"##, + label: "disjoint_capture_drop_reorder", + description: r##"Drop reorder because of `capture_disjoint_fields`"##, }, Lint { label: "drop_bounds", description: r##"bounds of the form `T: Drop` are useless"## }, Lint { @@ -98,7 +97,7 @@ pub struct Lint { }, Lint { label: "future_incompatible", - description: r##"lint group for: keyword-idents, anonymous-parameters, ellipsis-inclusive-range-patterns, forbidden-lint-groups, illegal-floating-point-literal-pattern, private-in-public, pub-use-of-private-extern-crate, invalid-type-param-default, const-err, unaligned-references, patterns-in-fns-without-body, missing-fragment-specifier, late-bound-lifetime-arguments, order-dependent-trait-objects, coherence-leak-check, tyvar-behind-raw-pointer, bare-trait-objects, absolute-paths-not-starting-with-crate, unstable-name-collisions, where-clauses-object-safety, proc-macro-derive-resolution-fallback, macro-expanded-macro-exports-accessed-by-absolute-paths, ill-formed-attribute-input, conflicting-repr-hints, ambiguous-associated-items, mutable-borrow-reservation-conflict, indirect-structural-match, pointer-structural-match, nontrivial-structural-match, soft-unstable, cenum-impl-drop-cast, const-evaluatable-unchecked, uninhabited-static, unsupported-naked-functions, semicolon-in-expressions-from-macros, legacy-derive-helpers, proc-macro-back-compat, array-into-iter"##, + description: r##"lint group for: keyword-idents, anonymous-parameters, forbidden-lint-groups, illegal-floating-point-literal-pattern, private-in-public, pub-use-of-private-extern-crate, invalid-type-param-default, const-err, unaligned-references, patterns-in-fns-without-body, missing-fragment-specifier, late-bound-lifetime-arguments, order-dependent-trait-objects, coherence-leak-check, tyvar-behind-raw-pointer, absolute-paths-not-starting-with-crate, unstable-name-collisions, where-clauses-object-safety, proc-macro-derive-resolution-fallback, macro-expanded-macro-exports-accessed-by-absolute-paths, ill-formed-attribute-input, conflicting-repr-hints, ambiguous-associated-items, mutable-borrow-reservation-conflict, indirect-structural-match, pointer-structural-match, nontrivial-structural-match, soft-unstable, cenum-impl-drop-cast, const-evaluatable-unchecked, uninhabited-static, unsupported-naked-functions, semicolon-in-expressions-from-macros, legacy-derive-helpers, proc-macro-back-compat, array-into-iter"##, }, Lint { label: "ill_formed_attribute_input", @@ -139,7 +138,7 @@ pub struct Lint { }, Lint { label: "invalid_value", - description: r##"an invalid value is being created (such as a null reference)"##, + description: r##"an invalid value is being created (such as a NULL reference)"##, }, Lint { label: "irrefutable_let_patterns", @@ -291,10 +290,6 @@ pub struct Lint { label: "rust_2018_idioms", description: r##"lint group for: bare-trait-objects, unused-extern-crates, ellipsis-inclusive-range-patterns, elided-lifetimes-in-paths, explicit-outlives-requirements"##, }, - Lint { - label: "rust_2021_compatibility", - description: r##"lint group for: ellipsis-inclusive-range-patterns, bare-trait-objects"##, - }, Lint { label: "semicolon_in_expressions_from_macros", description: r##"trailing semicolon in macro body used as expression"##, @@ -804,6 +799,7 @@ fn tag(&self) -> u8 { - Hexagon - MIPS32r2 and MIPS64r2 - wasm32 +- BPF ## Basic usage @@ -1229,7 +1225,7 @@ fn call_foo(arg: i32) { operand_expr := expr / "_" / expr "=>" expr / expr "=>" "_" reg_operand := dir_spec "(" reg_spec ")" operand_expr operand := reg_operand / "const" const_expr / "sym" path -option := "pure" / "nomem" / "readonly" / "preserves_flags" / "noreturn" / "nostack" / "att_syntax" +option := "pure" / "nomem" / "readonly" / "preserves_flags" / "noreturn" / "nostack" / "att_syntax" / "raw" options := "options(" option *["," option] [","] ")" asm := "asm!(" format_string *("," format_string) *("," [ident "="] operand) ["," options] [","] ")" ``` @@ -1344,6 +1340,8 @@ fn call_foo(arg: i32) { | PowerPC | `reg_nonzero` | | `r[1-31]` | `b` | | PowerPC | `freg` | `f[0-31]` | `f` | | wasm32 | `local` | None\* | `r` | +| BPF | `reg` | `r[0-10]` | `r` | +| BPF | `wreg` | `w[0-10]` | `w` | > **Note**: On x86 we treat `reg_byte` differently from `reg` because the compiler can allocate `al` and `ah` separately whereas `reg` reserves the whole register. > @@ -1389,6 +1387,8 @@ fn call_foo(arg: i32) { | PowerPC | `reg_nonzero` | None | `i8`, `i16`, `i32` | | PowerPC | `freg` | None | `f32`, `f64` | | wasm32 | `local` | None | `i8` `i16` `i32` `i64` `f32` `f64` | +| BPF | `reg` | None | `i8` `i16` `i32` `i64` | +| BPF | `wreg` | `alu32` | `i8` `i16` `i32` | > **Note**: For the purposes of the above table pointers, function pointers and `isize`/`usize` are treated as the equivalent integer type (`i16`/`i32`/`i64` depending on the target). @@ -1448,6 +1448,7 @@ fn call_foo(arg: i32) { | Hexagon | `r29` | `sp` | | Hexagon | `r30` | `fr` | | Hexagon | `r31` | `lr` | +| BPF | `r[0-10]` | `w[0-10]` | Some registers cannot be used for input or output operands: @@ -1549,6 +1550,7 @@ fn call_foo(arg: i32) { - `noreturn`: The `asm` block never returns, and its return type is defined as `!` (never). Behavior is undefined if execution falls through past the end of the asm code. A `noreturn` asm block behaves just like a function which doesn't return; notably, local variables in scope are not dropped before it is invoked. - `nostack`: The `asm` block does not push data to the stack, or write to the stack red-zone (if supported by the target). If this option is *not* used then the stack pointer is guaranteed to be suitably aligned (according to the target ABI) for a function call. - `att_syntax`: This option is only valid on x86, and causes the assembler to use the `.att_syntax prefix` mode of the GNU assembler. Register operands are substituted in with a leading `%`. +- `raw`: This causes the template string to be parsed as a raw assembly string, with no special handling for `{` and `}`. This is primarily useful when including raw assembly code from an external file using `include_str!`. The compiler performs some additional checks on options: - The `nomem` and `readonly` options are mutually exclusive: it is a compile-time error to specify both. @@ -3801,6 +3803,39 @@ fn cheap_clone(t: T) -> T { This is expected to replace the unstable `overlapping_marker_traits` feature, which applied to all empty traits (without needing an opt-in). +"##, + }, + Lint { + label: "more_qualified_paths", + description: r##"# `more_qualified_paths` + +The `more_qualified_paths` feature can be used in order to enable the +use of qualified paths in patterns. + +## Example + +```rust +#![feature(more_qualified_paths)] + +fn main() { + // destructure through a qualified path + let ::Assoc { br } = StructStruct { br: 2 }; +} + +struct StructStruct { + br: i8, +} + +struct Foo; + +trait A { + type Assoc; +} + +impl A for Foo { + type Assoc = StructStruct; +} +``` "##, }, Lint { @@ -4681,60 +4716,6 @@ pub union GenericUnion { // Unions with non-`Copy` fields are unstable. }; assert!(result.is_err()); ``` -"##, - }, - Lint { - label: "try_trait", - description: r##"# `try_trait` - -The tracking issue for this feature is: [#42327] - -[#42327]: https://github.com/rust-lang/rust/issues/42327 - ------------------------- - -This introduces a new trait `Try` for extending the `?` operator to types -other than `Result` (a part of [RFC 1859]). The trait provides the canonical -way to _view_ a type in terms of a success/failure dichotomy. This will -allow `?` to supplant the `try_opt!` macro on `Option` and the `try_ready!` -macro on `Poll`, among other things. - -[RFC 1859]: https://github.com/rust-lang/rfcs/pull/1859 - -Here's an example implementation of the trait: - -```rust,ignore (cannot-reimpl-Try) -/// A distinct type to represent the `None` value of an `Option`. -/// -/// This enables using the `?` operator on `Option`; it's rarely useful alone. -#[derive(Debug)] -#[unstable(feature = "try_trait", issue = "42327")] -pub struct None { _priv: () } - -#[unstable(feature = "try_trait", issue = "42327")] -impl ops::Try for Option { - type Ok = T; - type Error = None; - - fn into_result(self) -> Result { - self.ok_or(None { _priv: () }) - } - - fn from_ok(v: T) -> Self { - Some(v) - } - - fn from_error(_: None) -> Self { - None - } -} -``` - -Note the `Error` associated type here is a new marker. The `?` operator -allows interconversion between different `Try` implementers only when -the error type can be converted `Into` the error type of the enclosing -function (or catch block). Having a distinct error type (as opposed to -just `()`, or similar) restricts this to where it's semantically meaningful. "##, }, Lint { @@ -5035,6 +5016,10 @@ fn main() { label: "clippy::almost_swapped", description: r##"Checks for `foo = bar; bar = foo` sequences."##, }, + Lint { + label: "clippy::append_instead_of_extend", + description: r##"Checks for occurrences where one vector gets extended instead of append"##, + }, Lint { label: "clippy::approx_constant", description: r##"Checks for floating point literals that approximate @@ -5371,6 +5356,25 @@ fn main() { label: "clippy::disallowed_method", description: r##"Denies the configured methods and functions in clippy.toml"##, }, + Lint { + label: "clippy::disallowed_script_idents", + description: r##"Checks for usage of unicode scripts other than those explicitly allowed +by the lint config. + +This lint doesn't take into account non-text scripts such as `Unknown` and `Linear_A`. +It also ignores the `Common` script type. +While configuring, be sure to use official script name [aliases] from +[the list of supported scripts][supported_scripts]. + +See also: [`non_ascii_idents`]. + +[aliases]: http://www.unicode.org/reports/tr24/tr24-31.html#Script_Value_Aliases +[supported_scripts]: https://www.unicode.org/iso15924/iso15924-codes.html"##, + }, + Lint { + label: "clippy::disallowed_type", + description: r##"Denies the configured types in clippy.toml."##, + }, Lint { label: "clippy::diverging_sub_expression", description: r##"Checks for diverging calls that are not match arms or @@ -6147,6 +6151,11 @@ fn main() { label: "clippy::missing_docs_in_private_items", description: r##"Warns if there is missing doc for any documentable item (public or private)."##, + }, + Lint { + label: "clippy::missing_enforced_import_renames", + description: r##"Checks for imports that do not rename the item as specified +in the `enforce-import-renames` config option."##, }, Lint { label: "clippy::missing_errors_doc", @@ -6372,6 +6381,10 @@ fn main() { description: r##"Checks for duplicate open options as well as combinations that make no sense."##, }, + Lint { + label: "clippy::nonstandard_macro_braces", + description: r##"Checks that common macros are used with consistent bracing."##, + }, Lint { label: "clippy::not_unsafe_ptr_arg_deref", description: r##"Checks for public functions that dereference raw pointer @@ -6560,6 +6573,7 @@ fn main() { label: "clippy::rc_buffer", description: r##"Checks for `Rc` and `Arc` when `T` is a mutable buffer type such as `String` or `Vec`."##, }, + Lint { label: "clippy::rc_mutex", description: r##"Checks for `Rc>`."## }, Lint { label: "clippy::redundant_allocation", description: r##"Checks for use of redundant allocations anywhere in the code."##,