Move incorrect case diagnostic things into their module

This commit is contained in:
Lukas Wirth 2021-11-20 17:19:19 +01:00
parent 91def936bc
commit 69782f55de
4 changed files with 88 additions and 92 deletions

View File

@ -359,7 +359,7 @@ impl ModuleDef {
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 @@ impl DefWithBody {
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())
}
}

View File

@ -76,7 +76,7 @@ pub(super) fn lower_path(mut path: ast::Path, ctx: &LowerCtx) -> Option<Path> {
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 =

View File

@ -4,92 +4,10 @@ mod match_check;
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<IncorrectCase> {
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<ast::Name>,
pub expected_case: CaseType,
pub ident_type: IdentType,
pub ident_text: String,
pub suggested_text: String,
}

View File

@ -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 @@ use hir_def::{
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<IncorrectCase> {
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<ast::Name>,
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,