Move ParsedFile to top

This commit is contained in:
Aleksey Kladov 2018-08-25 11:40:17 +03:00
parent f104458d45
commit 9fae494a8d
7 changed files with 39 additions and 39 deletions

View file

@ -27,8 +27,9 @@ use std::{
}; };
use libsyntax2::{ use libsyntax2::{
ParsedFile,
TextUnit, TextRange, SmolStr, TextUnit, TextRange, SmolStr,
ast::{self, AstNode, NameOwner, ParsedFile}, ast::{self, AstNode, NameOwner},
SyntaxKind::*, SyntaxKind::*,
}; };
use libeditor::{LineIndex, FileSymbol, find_node}; use libeditor::{LineIndex, FileSymbol, find_node};

View file

@ -4,7 +4,8 @@ use std::{
use parking_lot::{RwLock, RwLockReadGuard, RwLockWriteGuard}; use parking_lot::{RwLock, RwLockReadGuard, RwLockWriteGuard};
use libsyntax2::{ use libsyntax2::{
ast::{self, AstNode, NameOwner, ParsedFile}, ParsedFile,
ast::{self, AstNode, NameOwner},
SyntaxNode, SmolStr, SyntaxNode, SmolStr,
}; };
use {FileId, FileResolver}; use {FileId, FileResolver};

View file

@ -3,7 +3,8 @@ use std::{
}; };
use libsyntax2::{ use libsyntax2::{
ast::{self, AstNode, AttrsOwner, TypeParamsOwner, NameOwner, ParsedFile}, ParsedFile,
ast::{self, AstNode, AttrsOwner, TypeParamsOwner, NameOwner},
SyntaxKind::COMMA, SyntaxKind::COMMA,
SyntaxNodeRef, SyntaxNodeRef,
algo::{ algo::{

View file

@ -10,8 +10,7 @@ mod code_actions;
mod typing; mod typing;
use libsyntax2::{ use libsyntax2::{
ast::{self, NameOwner}, ast::{self, AstNode, NameOwner},
AstNode,
algo::{walk, find_leaf_at_offset}, algo::{walk, find_leaf_at_offset},
SyntaxKind::{self, *}, SyntaxKind::{self, *},
}; };
@ -52,11 +51,11 @@ pub enum RunnableKind {
Bin, Bin,
} }
pub fn parse(text: &str) -> ast::ParsedFile { pub fn parse(text: &str) -> ParsedFile {
ast::ParsedFile::parse(text) ParsedFile::parse(text)
} }
pub fn matching_brace(file: &ast::ParsedFile, offset: TextUnit) -> Option<TextUnit> { pub fn matching_brace(file: &ParsedFile, offset: TextUnit) -> Option<TextUnit> {
const BRACES: &[SyntaxKind] = &[ const BRACES: &[SyntaxKind] = &[
L_CURLY, R_CURLY, L_CURLY, R_CURLY,
L_BRACK, R_BRACK, L_BRACK, R_BRACK,
@ -76,7 +75,7 @@ pub fn matching_brace(file: &ast::ParsedFile, offset: TextUnit) -> Option<TextUn
Some(matching_node.range().start()) Some(matching_node.range().start())
} }
pub fn highlight(file: &ast::ParsedFile) -> Vec<HighlightedRange> { pub fn highlight(file: &ParsedFile) -> Vec<HighlightedRange> {
let mut res = Vec::new(); let mut res = Vec::new();
for node in walk::preorder(file.syntax()) { for node in walk::preorder(file.syntax()) {
let tag = match node.kind() { let tag = match node.kind() {
@ -99,7 +98,7 @@ pub fn highlight(file: &ast::ParsedFile) -> Vec<HighlightedRange> {
res res
} }
pub fn diagnostics(file: &ast::ParsedFile) -> Vec<Diagnostic> { pub fn diagnostics(file: &ParsedFile) -> Vec<Diagnostic> {
let mut res = Vec::new(); let mut res = Vec::new();
for node in walk::preorder(file.syntax()) { for node in walk::preorder(file.syntax()) {
@ -117,11 +116,11 @@ pub fn diagnostics(file: &ast::ParsedFile) -> Vec<Diagnostic> {
res res
} }
pub fn syntax_tree(file: &ast::ParsedFile) -> String { pub fn syntax_tree(file: &ParsedFile) -> String {
::libsyntax2::utils::dump_tree(file.syntax()) ::libsyntax2::utils::dump_tree(file.syntax())
} }
pub fn runnables(file: &ast::ParsedFile) -> Vec<Runnable> { pub fn runnables(file: &ParsedFile) -> Vec<Runnable> {
file.ast() file.ast()
.functions() .functions()
.filter_map(|f| { .filter_map(|f| {

View file

@ -1,5 +1,5 @@
use libsyntax2::{ use libsyntax2::{
TextUnit, TextRange, SyntaxNodeRef, TextUnit, TextRange, SyntaxNodeRef, ParsedFile,
ast, ast,
algo::{ algo::{
walk::preorder, walk::preorder,
@ -11,7 +11,7 @@ use libsyntax2::{
use {ActionResult, EditBuilder}; use {ActionResult, EditBuilder};
pub fn join_lines(file: &ast::ParsedFile, range: TextRange) -> ActionResult { pub fn join_lines(file: &ParsedFile, range: TextRange) -> ActionResult {
let range = if range.is_empty() { let range = if range.is_empty() {
let text = file.syntax().text(); let text = file.syntax().text();
let text = &text[TextRange::from_to(range.start(), TextUnit::of_str(&text))]; let text = &text[TextRange::from_to(range.start(), TextUnit::of_str(&text))];

View file

@ -4,8 +4,7 @@ use itertools::Itertools;
use smol_str::SmolStr; use smol_str::SmolStr;
use { use {
SyntaxNode, SyntaxNodeRef, TreeRoot, SyntaxError, SyntaxNodeRef, SyntaxKind::*,
SyntaxKind::*,
}; };
pub use self::generated::*; pub use self::generated::*;
@ -37,28 +36,6 @@ pub trait AttrsOwner<'a>: AstNode<'a> {
} }
} }
#[derive(Clone, Debug)]
pub struct ParsedFile {
root: SyntaxNode
}
impl ParsedFile {
pub fn parse(text: &str) -> Self {
let root = ::parse(text);
ParsedFile { root }
}
pub fn ast(&self) -> File {
File::cast(self.syntax()).unwrap()
}
pub fn syntax(&self) -> SyntaxNodeRef {
self.root.borrowed()
}
pub fn errors(&self) -> Vec<SyntaxError> {
self.syntax().root.syntax_root().errors.clone()
}
}
impl<'a> FnDef<'a> { impl<'a> FnDef<'a> {
pub fn has_atom_attr(&self, atom: &str) -> bool { pub fn has_atom_attr(&self, atom: &str) -> bool {
self.attrs() self.attrs()

View file

@ -44,12 +44,33 @@ pub mod text_utils;
pub use { pub use {
text_unit::{TextRange, TextUnit}, text_unit::{TextRange, TextUnit},
smol_str::SmolStr, smol_str::SmolStr,
ast::{AstNode, ParsedFile}, ast::AstNode,
lexer::{tokenize, Token}, lexer::{tokenize, Token},
syntax_kinds::SyntaxKind, syntax_kinds::SyntaxKind,
yellow::{SyntaxNode, SyntaxNodeRef, OwnedRoot, RefRoot, TreeRoot, SyntaxError}, yellow::{SyntaxNode, SyntaxNodeRef, OwnedRoot, RefRoot, TreeRoot, SyntaxError},
}; };
#[derive(Clone, Debug)]
pub struct ParsedFile {
root: SyntaxNode
}
impl ParsedFile {
pub fn parse(text: &str) -> Self {
let root = ::parse(text);
ParsedFile { root }
}
pub fn ast(&self) -> ast::File {
ast::File::cast(self.syntax()).unwrap()
}
pub fn syntax(&self) -> SyntaxNodeRef {
self.root.borrowed()
}
pub fn errors(&self) -> Vec<SyntaxError> {
self.syntax().root.syntax_root().errors.clone()
}
}
pub fn parse(text: &str) -> SyntaxNode { pub fn parse(text: &str) -> SyntaxNode {
let tokens = tokenize(&text); let tokens = tokenize(&text);