Remove ra_fmt crate

This commit is contained in:
Aleksey Kladov 2020-08-13 11:56:11 +02:00
parent 479235ff0b
commit c81f6230da
8 changed files with 29 additions and 69 deletions

10
Cargo.lock generated
View file

@ -955,7 +955,6 @@ dependencies = [
"itertools",
"profile",
"ra_db",
"ra_fmt",
"ra_hir",
"ra_ide_db",
"rustc-hash",
@ -980,14 +979,6 @@ dependencies = [
"vfs",
]
[[package]]
name = "ra_fmt"
version = "0.1.0"
dependencies = [
"itertools",
"syntax",
]
[[package]]
name = "ra_hir"
version = "0.1.0"
@ -1092,7 +1083,6 @@ dependencies = [
"profile",
"ra_assists",
"ra_db",
"ra_fmt",
"ra_hir",
"ra_ide_db",
"ra_ssr",

View file

@ -17,7 +17,6 @@ stdx = { path = "../stdx" }
syntax = { path = "../syntax" }
text_edit = { path = "../text_edit" }
ra_fmt = { path = "../ra_fmt" }
profile = { path = "../profile" }
ra_db = { path = "../ra_db" }
ra_ide_db = { path = "../ra_ide_db" }

View file

@ -1,11 +1,10 @@
use hir::{EnumVariant, Module, ModuleDef, Name};
use ra_db::FileId;
use ra_fmt::leading_indent;
use ra_ide_db::{defs::Definition, search::Reference, RootDatabase};
use rustc_hash::FxHashSet;
use syntax::{
algo::find_node_at_offset,
ast::{self, ArgListOwner, AstNode, NameOwner, VisibilityOwner},
ast::{self, edit::IndentLevel, ArgListOwner, AstNode, NameOwner, VisibilityOwner},
SourceFile, TextRange, TextSize,
};
@ -112,7 +111,7 @@ fn insert_import(
Some(())
}
// FIXME: this should use strongly-typed `make`, rather than string manipulation1
// FIXME: this should use strongly-typed `make`, rather than string manipulation.
fn extract_struct_def(
builder: &mut AssistBuilder,
enum_: &ast::Enum,
@ -127,11 +126,7 @@ fn extract_struct_def(
} else {
"".to_string()
};
let indent = if let Some(indent) = leading_indent(enum_.syntax()) {
indent.to_string()
} else {
"".to_string()
};
let indent = IndentLevel::from_node(enum_.syntax());
let struct_def = format!(
r#"{}struct {}{};

View file

@ -2,13 +2,15 @@
// FIXME: rewrite according to the plan, outlined in
// https://github.com/rust-analyzer/rust-analyzer/issues/3301#issuecomment-592931553
use std::iter::successors;
use either::Either;
use hir::{self, ModPath};
use syntax::{
ast::{self, NameOwner, VisibilityOwner},
AstNode, Direction, SmolStr,
AstNode, AstToken, Direction, SmolStr,
SyntaxKind::{PATH, PATH_SEGMENT},
SyntaxNode, T,
SyntaxNode, SyntaxToken, T,
};
use text_edit::TextEditBuilder;
@ -442,7 +444,7 @@ fn make_assist_add_new_use(
edit: &mut TextEditBuilder,
) {
if let Some(anchor) = anchor {
let indent = ra_fmt::leading_indent(anchor);
let indent = leading_indent(anchor);
let mut buf = String::new();
if after {
buf.push_str("\n");
@ -524,3 +526,22 @@ fn make_assist_add_nested_import(
edit.insert(end, "}".to_string());
}
}
/// If the node is on the beginning of the line, calculate indent.
fn leading_indent(node: &SyntaxNode) -> Option<SmolStr> {
for token in prev_tokens(node.first_token()?) {
if let Some(ws) = ast::Whitespace::cast(token.clone()) {
let ws_text = ws.text();
if let Some(pos) = ws_text.rfind('\n') {
return Some(ws_text[pos + 1..].into());
}
}
if token.text().contains('\n') {
break;
}
}
return None;
fn prev_tokens(token: SyntaxToken) -> impl Iterator<Item = SyntaxToken> {
successors(token.prev_token(), |token| token.prev_token())
}
}

View file

@ -1,15 +0,0 @@
[package]
edition = "2018"
name = "ra_fmt"
version = "0.1.0"
authors = ["rust-analyzer developers"]
publish = false
license = "MIT OR Apache-2.0"
[lib]
doctest = false
[dependencies]
itertools = "0.9.0"
syntax = { path = "../syntax" }

View file

@ -1,28 +0,0 @@
//! This crate provides some utilities for indenting rust code.
use std::iter::successors;
use syntax::{
ast::{self, AstToken},
SmolStr, SyntaxNode, SyntaxToken,
};
/// If the node is on the beginning of the line, calculate indent.
pub fn leading_indent(node: &SyntaxNode) -> Option<SmolStr> {
for token in prev_tokens(node.first_token()?) {
if let Some(ws) = ast::Whitespace::cast(token.clone()) {
let ws_text = ws.text();
if let Some(pos) = ws_text.rfind('\n') {
return Some(ws_text[pos + 1..].into());
}
}
if token.text().contains('\n') {
break;
}
}
None
}
fn prev_tokens(token: SyntaxToken) -> impl Iterator<Item = SyntaxToken> {
successors(token.prev_token(), |token| token.prev_token())
}

View file

@ -26,7 +26,6 @@ text_edit = { path = "../text_edit" }
ra_db = { path = "../ra_db" }
ra_ide_db = { path = "../ra_ide_db" }
cfg = { path = "../cfg" }
ra_fmt = { path = "../ra_fmt" }
profile = { path = "../profile" }
test_utils = { path = "../test_utils" }
ra_assists = { path = "../ra_assists" }

View file

@ -16,11 +16,10 @@
mod on_enter;
use ra_db::{FilePosition, SourceDatabase};
use ra_fmt::leading_indent;
use ra_ide_db::{source_change::SourceFileEdit, RootDatabase};
use syntax::{
algo::find_node_at_offset,
ast::{self, AstToken},
ast::{self, edit::IndentLevel, AstToken},
AstNode, SourceFile,
SyntaxKind::{FIELD_EXPR, METHOD_CALL_EXPR},
TextRange, TextSize,
@ -104,7 +103,7 @@ fn on_dot_typed(file: &SourceFile, offset: TextSize) -> Option<TextEdit> {
if !matches!(parent.kind(), FIELD_EXPR | METHOD_CALL_EXPR) {
return None;
}
let prev_indent = leading_indent(&parent)?;
let prev_indent = IndentLevel::from_node(&parent);
let target_indent = format!(" {}", prev_indent);
let target_indent_len = TextSize::of(&target_indent);
if current_indent_len == target_indent_len {