Merge #5743
5743: Remove ra_fmt crate
r=matklad a=matklad
bors r+
🤖
Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
8870a5ea13
10
Cargo.lock
generated
10
Cargo.lock
generated
@ -955,7 +955,6 @@ dependencies = [
|
|||||||
"itertools",
|
"itertools",
|
||||||
"profile",
|
"profile",
|
||||||
"ra_db",
|
"ra_db",
|
||||||
"ra_fmt",
|
|
||||||
"ra_hir",
|
"ra_hir",
|
||||||
"ra_ide_db",
|
"ra_ide_db",
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
@ -980,14 +979,6 @@ dependencies = [
|
|||||||
"vfs",
|
"vfs",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ra_fmt"
|
|
||||||
version = "0.1.0"
|
|
||||||
dependencies = [
|
|
||||||
"itertools",
|
|
||||||
"syntax",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ra_hir"
|
name = "ra_hir"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@ -1092,7 +1083,6 @@ dependencies = [
|
|||||||
"profile",
|
"profile",
|
||||||
"ra_assists",
|
"ra_assists",
|
||||||
"ra_db",
|
"ra_db",
|
||||||
"ra_fmt",
|
|
||||||
"ra_hir",
|
"ra_hir",
|
||||||
"ra_ide_db",
|
"ra_ide_db",
|
||||||
"ra_ssr",
|
"ra_ssr",
|
||||||
|
@ -17,7 +17,6 @@ stdx = { path = "../stdx" }
|
|||||||
|
|
||||||
syntax = { path = "../syntax" }
|
syntax = { path = "../syntax" }
|
||||||
text_edit = { path = "../text_edit" }
|
text_edit = { path = "../text_edit" }
|
||||||
ra_fmt = { path = "../ra_fmt" }
|
|
||||||
profile = { path = "../profile" }
|
profile = { path = "../profile" }
|
||||||
ra_db = { path = "../ra_db" }
|
ra_db = { path = "../ra_db" }
|
||||||
ra_ide_db = { path = "../ra_ide_db" }
|
ra_ide_db = { path = "../ra_ide_db" }
|
||||||
|
@ -1,12 +1,11 @@
|
|||||||
use hir::{EnumVariant, Module, ModuleDef, Name};
|
use hir::{EnumVariant, Module, ModuleDef, Name};
|
||||||
use ra_db::FileId;
|
use ra_db::FileId;
|
||||||
use ra_fmt::leading_indent;
|
|
||||||
use ra_ide_db::{defs::Definition, search::Reference, RootDatabase};
|
use ra_ide_db::{defs::Definition, search::Reference, RootDatabase};
|
||||||
use rustc_hash::FxHashSet;
|
use rustc_hash::FxHashSet;
|
||||||
use syntax::{
|
use syntax::{
|
||||||
algo::find_node_at_offset,
|
algo::find_node_at_offset,
|
||||||
ast::{self, ArgListOwner, AstNode, NameOwner, VisibilityOwner},
|
ast::{self, edit::IndentLevel, ArgListOwner, AstNode, NameOwner, VisibilityOwner},
|
||||||
SourceFile, SyntaxNode, TextRange, TextSize,
|
SourceFile, TextRange, TextSize,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -72,7 +71,7 @@ pub(crate) fn extract_struct_from_enum_variant(
|
|||||||
}
|
}
|
||||||
extract_struct_def(
|
extract_struct_def(
|
||||||
builder,
|
builder,
|
||||||
enum_ast.syntax(),
|
&enum_ast,
|
||||||
&variant_name,
|
&variant_name,
|
||||||
&field_list.to_string(),
|
&field_list.to_string(),
|
||||||
start_offset,
|
start_offset,
|
||||||
@ -112,9 +111,10 @@ fn insert_import(
|
|||||||
Some(())
|
Some(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: this should use strongly-typed `make`, rather than string manipulation.
|
||||||
fn extract_struct_def(
|
fn extract_struct_def(
|
||||||
builder: &mut AssistBuilder,
|
builder: &mut AssistBuilder,
|
||||||
enum_ast: &SyntaxNode,
|
enum_: &ast::Enum,
|
||||||
variant_name: &str,
|
variant_name: &str,
|
||||||
variant_list: &str,
|
variant_list: &str,
|
||||||
start_offset: TextSize,
|
start_offset: TextSize,
|
||||||
@ -126,11 +126,7 @@ fn extract_struct_def(
|
|||||||
} else {
|
} else {
|
||||||
"".to_string()
|
"".to_string()
|
||||||
};
|
};
|
||||||
let indent = if let Some(indent) = leading_indent(enum_ast) {
|
let indent = IndentLevel::from_node(enum_.syntax());
|
||||||
indent.to_string()
|
|
||||||
} else {
|
|
||||||
"".to_string()
|
|
||||||
};
|
|
||||||
let struct_def = format!(
|
let struct_def = format!(
|
||||||
r#"{}struct {}{};
|
r#"{}struct {}{};
|
||||||
|
|
||||||
|
@ -2,13 +2,15 @@
|
|||||||
// FIXME: rewrite according to the plan, outlined in
|
// FIXME: rewrite according to the plan, outlined in
|
||||||
// https://github.com/rust-analyzer/rust-analyzer/issues/3301#issuecomment-592931553
|
// https://github.com/rust-analyzer/rust-analyzer/issues/3301#issuecomment-592931553
|
||||||
|
|
||||||
|
use std::iter::successors;
|
||||||
|
|
||||||
use either::Either;
|
use either::Either;
|
||||||
use hir::{self, ModPath};
|
use hir::{self, ModPath};
|
||||||
use syntax::{
|
use syntax::{
|
||||||
ast::{self, NameOwner, VisibilityOwner},
|
ast::{self, NameOwner, VisibilityOwner},
|
||||||
AstNode, Direction, SmolStr,
|
AstNode, AstToken, Direction, SmolStr,
|
||||||
SyntaxKind::{PATH, PATH_SEGMENT},
|
SyntaxKind::{PATH, PATH_SEGMENT},
|
||||||
SyntaxNode, T,
|
SyntaxNode, SyntaxToken, T,
|
||||||
};
|
};
|
||||||
use text_edit::TextEditBuilder;
|
use text_edit::TextEditBuilder;
|
||||||
|
|
||||||
@ -442,7 +444,7 @@ fn make_assist_add_new_use(
|
|||||||
edit: &mut TextEditBuilder,
|
edit: &mut TextEditBuilder,
|
||||||
) {
|
) {
|
||||||
if let Some(anchor) = anchor {
|
if let Some(anchor) = anchor {
|
||||||
let indent = ra_fmt::leading_indent(anchor);
|
let indent = leading_indent(anchor);
|
||||||
let mut buf = String::new();
|
let mut buf = String::new();
|
||||||
if after {
|
if after {
|
||||||
buf.push_str("\n");
|
buf.push_str("\n");
|
||||||
@ -524,3 +526,22 @@ fn make_assist_add_nested_import(
|
|||||||
edit.insert(end, "}".to_string());
|
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())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -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" }
|
|
@ -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())
|
|
||||||
}
|
|
@ -26,7 +26,6 @@ text_edit = { path = "../text_edit" }
|
|||||||
ra_db = { path = "../ra_db" }
|
ra_db = { path = "../ra_db" }
|
||||||
ra_ide_db = { path = "../ra_ide_db" }
|
ra_ide_db = { path = "../ra_ide_db" }
|
||||||
cfg = { path = "../cfg" }
|
cfg = { path = "../cfg" }
|
||||||
ra_fmt = { path = "../ra_fmt" }
|
|
||||||
profile = { path = "../profile" }
|
profile = { path = "../profile" }
|
||||||
test_utils = { path = "../test_utils" }
|
test_utils = { path = "../test_utils" }
|
||||||
ra_assists = { path = "../ra_assists" }
|
ra_assists = { path = "../ra_assists" }
|
||||||
|
@ -16,11 +16,10 @@
|
|||||||
mod on_enter;
|
mod on_enter;
|
||||||
|
|
||||||
use ra_db::{FilePosition, SourceDatabase};
|
use ra_db::{FilePosition, SourceDatabase};
|
||||||
use ra_fmt::leading_indent;
|
|
||||||
use ra_ide_db::{source_change::SourceFileEdit, RootDatabase};
|
use ra_ide_db::{source_change::SourceFileEdit, RootDatabase};
|
||||||
use syntax::{
|
use syntax::{
|
||||||
algo::find_node_at_offset,
|
algo::find_node_at_offset,
|
||||||
ast::{self, AstToken},
|
ast::{self, edit::IndentLevel, AstToken},
|
||||||
AstNode, SourceFile,
|
AstNode, SourceFile,
|
||||||
SyntaxKind::{FIELD_EXPR, METHOD_CALL_EXPR},
|
SyntaxKind::{FIELD_EXPR, METHOD_CALL_EXPR},
|
||||||
TextRange, TextSize,
|
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) {
|
if !matches!(parent.kind(), FIELD_EXPR | METHOD_CALL_EXPR) {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
let prev_indent = leading_indent(&parent)?;
|
let prev_indent = IndentLevel::from_node(&parent);
|
||||||
let target_indent = format!(" {}", prev_indent);
|
let target_indent = format!(" {}", prev_indent);
|
||||||
let target_indent_len = TextSize::of(&target_indent);
|
let target_indent_len = TextSize::of(&target_indent);
|
||||||
if current_indent_len == target_indent_len {
|
if current_indent_len == target_indent_len {
|
||||||
|
Loading…
Reference in New Issue
Block a user