From 69782f55de4c180d2c60a308a7898fdffd7611f4 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Sat, 20 Nov 2021 17:19:19 +0100 Subject: [PATCH] Move incorrect case diagnostic things into their module --- crates/hir/src/lib.rs | 4 +- crates/hir_def/src/path/lower.rs | 2 +- crates/hir_ty/src/diagnostics.rs | 84 +------------------ crates/hir_ty/src/diagnostics/decl_check.rs | 90 +++++++++++++++++++-- 4 files changed, 88 insertions(+), 92 deletions(-) diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 964c791e48f..3946f516421 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -359,7 +359,7 @@ pub fn diagnostics(self, db: &dyn HirDatabase) -> Vec { def.diagnostics(db, &mut acc); } None => { - for diag in hir_ty::diagnostics::validate_module_item(db, module.id.krate(), id) { + for diag in hir_ty::diagnostics::incorrect_case(db, module.id.krate(), id) { acc.push(diag.into()) } } @@ -1282,7 +1282,7 @@ pub fn diagnostics(self, db: &dyn HirDatabase, acc: &mut Vec) { DefWithBody::Static(it) => it.into(), DefWithBody::Const(it) => it.into(), }; - for diag in hir_ty::diagnostics::validate_module_item(db, krate, def.into()) { + for diag in hir_ty::diagnostics::incorrect_case(db, krate, def.into()) { acc.push(diag.into()) } } diff --git a/crates/hir_def/src/path/lower.rs b/crates/hir_def/src/path/lower.rs index c84cd50ce6e..3abc48d95df 100644 --- a/crates/hir_def/src/path/lower.rs +++ b/crates/hir_def/src/path/lower.rs @@ -76,7 +76,7 @@ pub(super) fn lower_path(mut path: ast::Path, ctx: &LowerCtx) -> Option { kind = mod_path.kind; segments.extend(mod_path.segments.iter().cloned().rev()); - generic_args.extend(path_generic_args.iter().cloned().rev()); + generic_args.extend(Vec::from(path_generic_args).into_iter().rev()); // Insert the type reference (T in the above example) as Self parameter for the trait let last_segment = diff --git a/crates/hir_ty/src/diagnostics.rs b/crates/hir_ty/src/diagnostics.rs index 6339c9687cd..a4702715e5b 100644 --- a/crates/hir_ty/src/diagnostics.rs +++ b/crates/hir_ty/src/diagnostics.rs @@ -4,92 +4,10 @@ mod unsafe_check; mod decl_check; -use std::fmt; - -use base_db::CrateId; -use hir_def::ModuleDefId; -use hir_expand::HirFileId; -use syntax::{ast, AstPtr}; - -use crate::db::HirDatabase; - pub use crate::diagnostics::{ + decl_check::{incorrect_case, IncorrectCase}, expr::{ record_literal_missing_fields, record_pattern_missing_fields, BodyValidationDiagnostic, }, unsafe_check::missing_unsafe, }; - -pub fn validate_module_item( - db: &dyn HirDatabase, - krate: CrateId, - owner: ModuleDefId, -) -> Vec { - let _p = profile::span("validate_module_item"); - let mut validator = decl_check::DeclValidator::new(db, krate); - validator.validate_item(owner); - validator.sink -} - -#[derive(Debug)] -pub enum CaseType { - // `some_var` - LowerSnakeCase, - // `SOME_CONST` - UpperSnakeCase, - // `SomeStruct` - UpperCamelCase, -} - -impl fmt::Display for CaseType { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let repr = match self { - CaseType::LowerSnakeCase => "snake_case", - CaseType::UpperSnakeCase => "UPPER_SNAKE_CASE", - CaseType::UpperCamelCase => "CamelCase", - }; - - write!(f, "{}", repr) - } -} - -#[derive(Debug)] -pub enum IdentType { - Constant, - Enum, - Field, - Function, - Parameter, - StaticVariable, - Structure, - Variable, - Variant, -} - -impl fmt::Display for IdentType { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let repr = match self { - IdentType::Constant => "Constant", - IdentType::Enum => "Enum", - IdentType::Field => "Field", - IdentType::Function => "Function", - IdentType::Parameter => "Parameter", - IdentType::StaticVariable => "Static variable", - IdentType::Structure => "Structure", - IdentType::Variable => "Variable", - IdentType::Variant => "Variant", - }; - - write!(f, "{}", repr) - } -} - -#[derive(Debug)] -pub struct IncorrectCase { - pub file: HirFileId, - pub ident: AstPtr, - pub expected_case: CaseType, - pub ident_type: IdentType, - pub ident_text: String, - pub suggested_text: String, -} diff --git a/crates/hir_ty/src/diagnostics/decl_check.rs b/crates/hir_ty/src/diagnostics/decl_check.rs index 4f4a92447ff..6a3588dc741 100644 --- a/crates/hir_ty/src/diagnostics/decl_check.rs +++ b/crates/hir_ty/src/diagnostics/decl_check.rs @@ -1,4 +1,4 @@ -//! Provides validators for the item declarations. +//! Provides validators for names of declarations. //! //! This includes the following items: //! @@ -12,6 +12,8 @@ mod case_conv; +use std::fmt; + use base_db::CrateId; use hir_def::{ adt::VariantData, @@ -19,17 +21,19 @@ src::HasSource, AdtId, AttrDefId, ConstId, EnumId, FunctionId, Lookup, ModuleDefId, StaticId, StructId, }; -use hir_expand::name::{AsName, Name}; +use hir_expand::{ + name::{AsName, Name}, + HirFileId, +}; use stdx::{always, never}; use syntax::{ ast::{self, HasName}, AstNode, AstPtr, }; -use crate::{ - db::HirDatabase, - diagnostics::{decl_check::case_conv::*, CaseType, IdentType, IncorrectCase}, -}; +use crate::db::HirDatabase; + +use self::case_conv::{to_camel_case, to_lower_snake_case, to_upper_snake_case}; mod allow { pub(super) const BAD_STYLE: &str = "bad_style"; @@ -39,6 +43,80 @@ mod allow { pub(super) const NON_CAMEL_CASE_TYPES: &str = "non_camel_case_types"; } +pub fn incorrect_case( + db: &dyn HirDatabase, + krate: CrateId, + owner: ModuleDefId, +) -> Vec { + let _p = profile::span("validate_module_item"); + let mut validator = DeclValidator::new(db, krate); + validator.validate_item(owner); + validator.sink +} + +#[derive(Debug)] +pub enum CaseType { + // `some_var` + LowerSnakeCase, + // `SOME_CONST` + UpperSnakeCase, + // `SomeStruct` + UpperCamelCase, +} + +impl fmt::Display for CaseType { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let repr = match self { + CaseType::LowerSnakeCase => "snake_case", + CaseType::UpperSnakeCase => "UPPER_SNAKE_CASE", + CaseType::UpperCamelCase => "CamelCase", + }; + + write!(f, "{}", repr) + } +} + +#[derive(Debug)] +pub enum IdentType { + Constant, + Enum, + Field, + Function, + Parameter, + StaticVariable, + Structure, + Variable, + Variant, +} + +impl fmt::Display for IdentType { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let repr = match self { + IdentType::Constant => "Constant", + IdentType::Enum => "Enum", + IdentType::Field => "Field", + IdentType::Function => "Function", + IdentType::Parameter => "Parameter", + IdentType::StaticVariable => "Static variable", + IdentType::Structure => "Structure", + IdentType::Variable => "Variable", + IdentType::Variant => "Variant", + }; + + write!(f, "{}", repr) + } +} + +#[derive(Debug)] +pub struct IncorrectCase { + pub file: HirFileId, + pub ident: AstPtr, + pub expected_case: CaseType, + pub ident_type: IdentType, + pub ident_text: String, + pub suggested_text: String, +} + pub(super) struct DeclValidator<'a> { db: &'a dyn HirDatabase, krate: CrateId, -- 2.44.0