mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
Merge #5126
5126: Use more of FxHash* r=matklad a=lnicola ``` -rwxr-xr-x 1 me me 37917528 Jun 29 17:26 /home/me/.cargo/bin/rust-analyzer -rwxr-xr-x 1 me me 37904056 Jun 29 18:14 /home/me/.cargo/bin/rust-analyzer ``` Saved 13.5 KB there :-). Co-authored-by: Laurențiu Nicola <lnicola@dend.ro>
This commit is contained in:
commit
4da0a78c4e
6 changed files with 25 additions and 15 deletions
|
@ -1,7 +1,7 @@
|
||||||
use std::collections::HashMap;
|
use itertools::Itertools;
|
||||||
|
use rustc_hash::FxHashMap;
|
||||||
|
|
||||||
use hir::{Adt, ModuleDef, PathResolution, Semantics, Struct};
|
use hir::{Adt, ModuleDef, PathResolution, Semantics, Struct};
|
||||||
use itertools::Itertools;
|
|
||||||
use ra_ide_db::RootDatabase;
|
use ra_ide_db::RootDatabase;
|
||||||
use ra_syntax::{algo, ast, match_ast, AstNode, SyntaxKind, SyntaxKind::*, SyntaxNode};
|
use ra_syntax::{algo, ast, match_ast, AstNode, SyntaxKind, SyntaxKind::*, SyntaxNode};
|
||||||
|
|
||||||
|
@ -87,7 +87,7 @@ fn struct_definition(path: &ast::Path, sema: &Semantics<RootDatabase>) -> Option
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn compute_fields_ranks(path: &ast::Path, ctx: &AssistContext) -> Option<HashMap<String, usize>> {
|
fn compute_fields_ranks(path: &ast::Path, ctx: &AssistContext) -> Option<FxHashMap<String, usize>> {
|
||||||
Some(
|
Some(
|
||||||
struct_definition(path, &ctx.sema)?
|
struct_definition(path, &ctx.sema)?
|
||||||
.fields(ctx.db)
|
.fields(ctx.db)
|
||||||
|
|
|
@ -165,7 +165,7 @@ fn parse_pattern(pattern_str: &str) -> Result<Vec<PatternElement>, SsrError> {
|
||||||
/// Checks for errors in a rule. e.g. the replace pattern referencing placeholders that the search
|
/// Checks for errors in a rule. e.g. the replace pattern referencing placeholders that the search
|
||||||
/// pattern didn't define.
|
/// pattern didn't define.
|
||||||
fn validate_rule(rule: &SsrRule) -> Result<(), SsrError> {
|
fn validate_rule(rule: &SsrRule) -> Result<(), SsrError> {
|
||||||
let mut defined_placeholders = std::collections::HashSet::new();
|
let mut defined_placeholders = FxHashSet::default();
|
||||||
for p in &rule.pattern.raw.tokens {
|
for p in &rule.pattern.raw.tokens {
|
||||||
if let PatternElement::Placeholder(placeholder) = p {
|
if let PatternElement::Placeholder(placeholder) = p {
|
||||||
defined_placeholders.insert(&placeholder.ident);
|
defined_placeholders.insert(&placeholder.ident);
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
//! Fully type-check project and print various stats, like the number of type
|
//! Fully type-check project and print various stats, like the number of type
|
||||||
//! errors.
|
//! errors.
|
||||||
|
|
||||||
use std::{collections::HashSet, path::Path, time::Instant};
|
use std::{path::Path, time::Instant};
|
||||||
|
|
||||||
|
use itertools::Itertools;
|
||||||
|
use rand::{seq::SliceRandom, thread_rng};
|
||||||
|
use rustc_hash::FxHashSet;
|
||||||
|
|
||||||
use hir::{
|
use hir::{
|
||||||
db::{AstDatabase, DefDatabase, HirDatabase},
|
db::{AstDatabase, DefDatabase, HirDatabase},
|
||||||
|
@ -9,10 +13,8 @@ use hir::{
|
||||||
};
|
};
|
||||||
use hir_def::FunctionId;
|
use hir_def::FunctionId;
|
||||||
use hir_ty::{Ty, TypeWalk};
|
use hir_ty::{Ty, TypeWalk};
|
||||||
use itertools::Itertools;
|
|
||||||
use ra_db::SourceDatabaseExt;
|
use ra_db::SourceDatabaseExt;
|
||||||
use ra_syntax::AstNode;
|
use ra_syntax::AstNode;
|
||||||
use rand::{seq::SliceRandom, thread_rng};
|
|
||||||
use stdx::format_to;
|
use stdx::format_to;
|
||||||
|
|
||||||
use crate::cli::{load_cargo::load_cargo, progress_report::ProgressReport, Result, Verbosity};
|
use crate::cli::{load_cargo::load_cargo, progress_report::ProgressReport, Result, Verbosity};
|
||||||
|
@ -33,7 +35,7 @@ pub fn analysis_stats(
|
||||||
println!("Database loaded {:?}", db_load_time.elapsed());
|
println!("Database loaded {:?}", db_load_time.elapsed());
|
||||||
let analysis_time = Instant::now();
|
let analysis_time = Instant::now();
|
||||||
let mut num_crates = 0;
|
let mut num_crates = 0;
|
||||||
let mut visited_modules = HashSet::new();
|
let mut visited_modules = FxHashSet::default();
|
||||||
let mut visit_queue = Vec::new();
|
let mut visit_queue = Vec::new();
|
||||||
|
|
||||||
let mut krates = Crate::all(db);
|
let mut krates = Crate::all(db);
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
//! Analyze all modules in a project for diagnostics. Exits with a non-zero status
|
//! Analyze all modules in a project for diagnostics. Exits with a non-zero status
|
||||||
//! code if any errors are found.
|
//! code if any errors are found.
|
||||||
|
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
use anyhow::anyhow;
|
use anyhow::anyhow;
|
||||||
|
use rustc_hash::FxHashSet;
|
||||||
|
|
||||||
use hir::Crate;
|
use hir::Crate;
|
||||||
use ra_db::SourceDatabaseExt;
|
use ra_db::SourceDatabaseExt;
|
||||||
use ra_ide::Severity;
|
use ra_ide::Severity;
|
||||||
use std::{collections::HashSet, path::Path};
|
|
||||||
|
|
||||||
use crate::cli::{load_cargo::load_cargo, Result};
|
use crate::cli::{load_cargo::load_cargo, Result};
|
||||||
|
|
||||||
|
@ -20,7 +23,7 @@ pub fn diagnostics(
|
||||||
let analysis = host.analysis();
|
let analysis = host.analysis();
|
||||||
|
|
||||||
let mut found_error = false;
|
let mut found_error = false;
|
||||||
let mut visited_files = HashSet::new();
|
let mut visited_files = FxHashSet::default();
|
||||||
|
|
||||||
let mut work = Vec::new();
|
let mut work = Vec::new();
|
||||||
let krates = Crate::all(db);
|
let krates = Crate::all(db);
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
//! Book keeping for keeping diagnostics easily in sync with the client.
|
//! Book keeping for keeping diagnostics easily in sync with the client.
|
||||||
pub(crate) mod to_proto;
|
pub(crate) mod to_proto;
|
||||||
|
|
||||||
use std::{collections::HashMap, mem, sync::Arc};
|
use std::{mem, sync::Arc};
|
||||||
|
|
||||||
use ra_ide::FileId;
|
use ra_ide::FileId;
|
||||||
use rustc_hash::FxHashSet;
|
use rustc_hash::{FxHashMap, FxHashSet};
|
||||||
|
|
||||||
use crate::lsp_ext;
|
use crate::lsp_ext;
|
||||||
|
|
||||||
pub(crate) type CheckFixes = Arc<HashMap<FileId, Vec<Fix>>>;
|
pub(crate) type CheckFixes = Arc<FxHashMap<FileId, Vec<Fix>>>;
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone)]
|
#[derive(Debug, Default, Clone)]
|
||||||
pub struct DiagnosticsConfig {
|
pub struct DiagnosticsConfig {
|
||||||
|
@ -18,8 +18,8 @@ pub struct DiagnosticsConfig {
|
||||||
|
|
||||||
#[derive(Debug, Default, Clone)]
|
#[derive(Debug, Default, Clone)]
|
||||||
pub(crate) struct DiagnosticCollection {
|
pub(crate) struct DiagnosticCollection {
|
||||||
pub(crate) native: HashMap<FileId, Vec<lsp_types::Diagnostic>>,
|
pub(crate) native: FxHashMap<FileId, Vec<lsp_types::Diagnostic>>,
|
||||||
pub(crate) check: HashMap<FileId, Vec<lsp_types::Diagnostic>>,
|
pub(crate) check: FxHashMap<FileId, Vec<lsp_types::Diagnostic>>,
|
||||||
pub(crate) check_fixes: CheckFixes,
|
pub(crate) check_fixes: CheckFixes,
|
||||||
changes: FxHashSet<FileId>,
|
changes: FxHashSet<FileId>,
|
||||||
}
|
}
|
||||||
|
|
|
@ -254,6 +254,11 @@ The default name is a lowercased name of the type: `global_state: GlobalState`.
|
||||||
Avoid ad-hoc acronyms and contractions, but use the ones that exist consistently (`db`, `ctx`, `acc`).
|
Avoid ad-hoc acronyms and contractions, but use the ones that exist consistently (`db`, `ctx`, `acc`).
|
||||||
The default name for "result of the function" local variable is `res`.
|
The default name for "result of the function" local variable is `res`.
|
||||||
|
|
||||||
|
## Collection types
|
||||||
|
|
||||||
|
We prefer `rustc_hash::FxHashMap` and `rustc_hash::FxHashSet` instead of the ones in `std::collections`.
|
||||||
|
They use a hasher that's slightly faster and using them consistently will reduce code size by some small amount.
|
||||||
|
|
||||||
## Preconditions
|
## Preconditions
|
||||||
|
|
||||||
Function preconditions should generally be expressed in types and provided by the caller (rather than checked by callee):
|
Function preconditions should generally be expressed in types and provided by the caller (rather than checked by callee):
|
||||||
|
|
Loading…
Reference in a new issue