From 6596e7cddfc00281362c3640781f6cd6bc0b5614 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 28 Mar 2020 11:08:19 +0100 Subject: Nice string formatting --- Cargo.lock | 4 ++++ crates/ra_hir_def/Cargo.toml | 2 ++ crates/ra_hir_def/src/nameres.rs | 5 +++-- crates/ra_hir_ty/Cargo.toml | 2 ++ crates/ra_hir_ty/src/test_db.rs | 3 ++- crates/ra_syntax/Cargo.toml | 2 ++ crates/ra_syntax/src/ast/make.rs | 15 ++++++++------- crates/ra_syntax/src/lib.rs | 7 ++++--- crates/rust-analyzer/Cargo.toml | 2 ++ crates/rust-analyzer/src/world.rs | 15 ++++++++------- crates/stdx/src/lib.rs | 2 +- 11 files changed, 38 insertions(+), 21 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6735d6b5d..8d81c4839 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -966,6 +966,7 @@ dependencies = [ "ra_syntax", "ra_tt", "rustc-hash", + "stdx", "test_utils", ] @@ -1002,6 +1003,7 @@ dependencies = [ "ra_prof", "ra_syntax", "rustc-hash", + "stdx", "test_utils", ] @@ -1116,6 +1118,7 @@ dependencies = [ "rustc_lexer", "serde", "smol_str", + "stdx", "test_utils", "walkdir", ] @@ -1307,6 +1310,7 @@ dependencies = [ "rustc-hash", "serde", "serde_json", + "stdx", "tempfile", "test_utils", "threadpool", diff --git a/crates/ra_hir_def/Cargo.toml b/crates/ra_hir_def/Cargo.toml index 30a12337e..56e791e3e 100644 --- a/crates/ra_hir_def/Cargo.toml +++ b/crates/ra_hir_def/Cargo.toml @@ -15,6 +15,8 @@ either = "1.5.3" anymap = "0.12.1" drop_bomb = "0.1.4" +stdx = { path = "../stdx" } + ra_arena = { path = "../ra_arena" } ra_db = { path = "../ra_db" } ra_syntax = { path = "../ra_syntax" } diff --git a/crates/ra_hir_def/src/nameres.rs b/crates/ra_hir_def/src/nameres.rs index 40bdc34f5..f279c2ad4 100644 --- a/crates/ra_hir_def/src/nameres.rs +++ b/crates/ra_hir_def/src/nameres.rs @@ -63,6 +63,7 @@ use ra_db::{CrateId, Edition, FileId}; use ra_prof::profile; use ra_syntax::ast; use rustc_hash::FxHashMap; +use stdx::format_to; use crate::{ db::DefDatabase, @@ -246,7 +247,7 @@ impl CrateDefMap { entries.sort_by_key(|(name, _)| name.clone()); for (name, def) in entries { - *buf += &format!("{}:", name); + format_to!(buf, "{}:", name); if def.types.is_some() { *buf += " t"; @@ -265,7 +266,7 @@ impl CrateDefMap { } for (name, child) in map.modules[module].children.iter() { - let path = path.to_string() + &format!("::{}", name); + let path = &format!("{}::{}", path, name); go(buf, map, &path, *child); } } diff --git a/crates/ra_hir_ty/Cargo.toml b/crates/ra_hir_ty/Cargo.toml index 9962112db..5a58d70cf 100644 --- a/crates/ra_hir_ty/Cargo.toml +++ b/crates/ra_hir_ty/Cargo.toml @@ -13,6 +13,8 @@ ena = "0.13.1" log = "0.4.8" rustc-hash = "1.1.0" +stdx = { path = "../stdx" } + hir_def = { path = "../ra_hir_def", package = "ra_hir_def" } hir_expand = { path = "../ra_hir_expand", package = "ra_hir_expand" } ra_arena = { path = "../ra_arena" } diff --git a/crates/ra_hir_ty/src/test_db.rs b/crates/ra_hir_ty/src/test_db.rs index 5bbeabf51..208096aab 100644 --- a/crates/ra_hir_ty/src/test_db.rs +++ b/crates/ra_hir_ty/src/test_db.rs @@ -10,6 +10,7 @@ use hir_expand::{db::AstDatabase, diagnostics::DiagnosticSink}; use ra_db::{ salsa, CrateId, FileId, FileLoader, FileLoaderDelegate, RelativePath, SourceDatabase, Upcast, }; +use stdx::format_to; use crate::{db::HirDatabase, expr::ExprValidator}; @@ -131,7 +132,7 @@ impl TestDB { for f in fns { let infer = self.infer(f.into()); let mut sink = DiagnosticSink::new(|d| { - buf += &format!("{:?}: {}\n", d.syntax_node(self).text(), d.message()); + format_to!(buf, "{:?}: {}\n", d.syntax_node(self).text(), d.message()); }); infer.add_diagnostics(self, f, &mut sink); let mut validator = ExprValidator::new(f, infer, &mut sink); diff --git a/crates/ra_syntax/Cargo.toml b/crates/ra_syntax/Cargo.toml index 6fccc2303..3c6ae77e4 100644 --- a/crates/ra_syntax/Cargo.toml +++ b/crates/ra_syntax/Cargo.toml @@ -18,6 +18,8 @@ rustc-hash = "1.1.0" arrayvec = "0.5.1" once_cell = "1.3.1" +stdx = { path = "../stdx" } + ra_text_edit = { path = "../ra_text_edit" } ra_parser = { path = "../ra_parser" } diff --git a/crates/ra_syntax/src/ast/make.rs b/crates/ra_syntax/src/ast/make.rs index dbf8e6370..0c908573d 100644 --- a/crates/ra_syntax/src/ast/make.rs +++ b/crates/ra_syntax/src/ast/make.rs @@ -1,6 +1,7 @@ //! This module contains free-standing functions for creating AST fragments out //! of smaller pieces. use itertools::Itertools; +use stdx::format_to; use crate::{ast, AstNode, SourceFile, SyntaxKind, SyntaxNode, SyntaxToken}; @@ -34,14 +35,14 @@ pub fn use_tree( let mut buf = "use ".to_string(); buf += &path.syntax().to_string(); if let Some(use_tree_list) = use_tree_list { - buf += &format!("::{}", use_tree_list); + format_to!(buf, "::{}", use_tree_list); } if add_star { buf += "::*"; } if let Some(alias) = alias { - buf += &format!(" {}", alias); + format_to!(buf, " {}", alias); } ast_from_text(&buf) } @@ -70,15 +71,15 @@ pub fn block_expr( stmts: impl IntoIterator, tail_expr: Option, ) -> ast::BlockExpr { - let mut text = "{\n".to_string(); + let mut buf = "{\n".to_string(); for stmt in stmts.into_iter() { - text += &format!(" {}\n", stmt); + format_to!(buf, " {}\n", stmt); } if let Some(tail_expr) = tail_expr { - text += &format!(" {}\n", tail_expr) + format_to!(buf, " {}\n", tail_expr) } - text += "}"; - ast_from_text(&format!("fn f() {}", text)) + buf += "}"; + ast_from_text(&format!("fn f() {}", buf)) } pub fn block_from_expr(e: ast::Expr) -> ast::Block { diff --git a/crates/ra_syntax/src/lib.rs b/crates/ra_syntax/src/lib.rs index cef926ed3..f0e16dc2b 100644 --- a/crates/ra_syntax/src/lib.rs +++ b/crates/ra_syntax/src/lib.rs @@ -32,9 +32,10 @@ pub mod ast; #[doc(hidden)] pub mod fuzz; -use std::{fmt::Write, marker::PhantomData, sync::Arc}; +use std::{marker::PhantomData, sync::Arc}; use ra_text_edit::AtomTextEdit; +use stdx::format_to; use crate::syntax_node::GreenNode; @@ -115,7 +116,7 @@ impl Parse { pub fn debug_dump(&self) -> String { let mut buf = format!("{:#?}", self.tree().syntax()); for err in self.errors.iter() { - writeln!(buf, "error {:?}: {}", err.range(), err).unwrap(); + format_to!(buf, "error {:?}: {}\n", err.range(), err); } buf } @@ -296,7 +297,7 @@ fn api_walkthrough() { NodeOrToken::Node(it) => it.text().to_string(), NodeOrToken::Token(it) => it.text().to_string(), }; - buf += &format!("{:indent$}{:?} {:?}\n", " ", text, node.kind(), indent = indent); + format_to!(buf, "{:indent$}{:?} {:?}\n", " ", text, node.kind(), indent = indent); indent += 2; } WalkEvent::Leave(_) => indent -= 2, diff --git a/crates/rust-analyzer/Cargo.toml b/crates/rust-analyzer/Cargo.toml index e071e9b8d..8fe6799d2 100644 --- a/crates/rust-analyzer/Cargo.toml +++ b/crates/rust-analyzer/Cargo.toml @@ -30,6 +30,8 @@ serde = { version = "1.0.104", features = ["derive"] } serde_json = "1.0.48" threadpool = "1.7.1" +stdx = { path = "../stdx" } + lsp-server = "0.3.1" ra_cargo_watch = { path = "../ra_cargo_watch" } ra_ide = { path = "../ra_ide" } diff --git a/crates/rust-analyzer/src/world.rs b/crates/rust-analyzer/src/world.rs index de85bb017..64a7b907e 100644 --- a/crates/rust-analyzer/src/world.rs +++ b/crates/rust-analyzer/src/world.rs @@ -19,6 +19,7 @@ use ra_ide::{ use ra_project_model::{get_rustc_cfg_options, ProcMacroClient, ProjectWorkspace}; use ra_vfs::{LineEndings, RootEntry, Vfs, VfsChange, VfsFile, VfsRoot, VfsTask, Watch}; use relative_path::RelativePathBuf; +use stdx::format_to; use crate::{ diagnostics::{CheckFixes, DiagnosticCollection}, @@ -319,23 +320,23 @@ impl WorldSnapshot { } pub fn status(&self) -> String { - let mut res = String::new(); + let mut buf = String::new(); if self.workspaces.is_empty() { - res.push_str("no workspaces\n") + buf.push_str("no workspaces\n") } else { - res.push_str("workspaces:\n"); + buf.push_str("workspaces:\n"); for w in self.workspaces.iter() { - res += &format!("{} packages loaded\n", w.n_packages()); + format_to!(buf, "{} packages loaded\n", w.n_packages()); } } - res.push_str("\nanalysis:\n"); - res.push_str( + buf.push_str("\nanalysis:\n"); + buf.push_str( &self .analysis .status() .unwrap_or_else(|_| "Analysis retrieval was cancelled".to_owned()), ); - res + buf } pub fn workspace_root_for(&self, file_id: FileId) -> Option<&Path> { diff --git a/crates/stdx/src/lib.rs b/crates/stdx/src/lib.rs index a01ca6d4d..8492c17af 100644 --- a/crates/stdx/src/lib.rs +++ b/crates/stdx/src/lib.rs @@ -21,7 +21,7 @@ where I: Iterator, I::Item: fmt::Display, { - fn sep_by<'a>(self, sep: &'a std::primitive::str) -> SepByBuilder<'a, Self> { + fn sep_by<'a>(self, sep: &'a str) -> SepByBuilder<'a, Self> { SepByBuilder::new(sep, self) } } -- cgit v1.2.3