mirror of
https://github.com/RGBCube/cstree
synced 2025-08-01 19:47:46 +00:00
update to Rust edition 2024
This commit is contained in:
parent
de990819b1
commit
8708fda02f
26 changed files with 59 additions and 46 deletions
|
@ -7,7 +7,7 @@ members = [
|
||||||
resolver = "2"
|
resolver = "2"
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
edition = "2021"
|
edition = "2024"
|
||||||
version = "0.12.2" # when updating, also update `#![doc(html_root_url)]` and any inter-crate dependencies (such as `cstree`'s dependency on `cstree-derive`)
|
version = "0.12.2" # when updating, also update `#![doc(html_root_url)]` and any inter-crate dependencies (such as `cstree`'s dependency on `cstree-derive`)
|
||||||
authors = [
|
authors = [
|
||||||
"Domenic Quirl <DomenicQuirl@pm.me>",
|
"Domenic Quirl <DomenicQuirl@pm.me>",
|
||||||
|
|
|
@ -17,7 +17,7 @@ use errors::ErrorContext;
|
||||||
use parsing::SyntaxKindEnum;
|
use parsing::SyntaxKindEnum;
|
||||||
use proc_macro2::TokenStream;
|
use proc_macro2::TokenStream;
|
||||||
use quote::{quote, quote_spanned};
|
use quote::{quote, quote_spanned};
|
||||||
use syn::{parse_macro_input, spanned::Spanned, DeriveInput};
|
use syn::{DeriveInput, parse_macro_input, spanned::Spanned};
|
||||||
|
|
||||||
mod errors;
|
mod errors;
|
||||||
mod parsing;
|
mod parsing;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
mod attributes;
|
mod attributes;
|
||||||
|
|
||||||
use syn::{punctuated::Punctuated, Token};
|
use syn::{Token, punctuated::Punctuated};
|
||||||
|
|
||||||
use crate::{errors::ErrorContext, symbols::*};
|
use crate::{errors::ErrorContext, symbols::*};
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput};
|
use criterion::{Criterion, Throughput, black_box, criterion_group, criterion_main};
|
||||||
use cstree::{
|
use cstree::{
|
||||||
|
RawSyntaxKind,
|
||||||
|
Syntax,
|
||||||
build::*,
|
build::*,
|
||||||
green::GreenNode,
|
green::GreenNode,
|
||||||
interning::{new_interner, Interner},
|
interning::{Interner, new_interner},
|
||||||
RawSyntaxKind, Syntax,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
//! - "+" Token(Add)
|
//! - "+" Token(Add)
|
||||||
//! - "4" Token(Number)
|
//! - "4" Token(Number)
|
||||||
|
|
||||||
use cstree::{build::GreenNodeBuilder, interning::Resolver, util::NodeOrToken, Syntax};
|
use cstree::{Syntax, build::GreenNodeBuilder, interning::Resolver, util::NodeOrToken};
|
||||||
use std::iter::Peekable;
|
use std::iter::Peekable;
|
||||||
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Syntax)]
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Syntax)]
|
||||||
|
@ -99,7 +99,7 @@ impl<'input, I: Iterator<Item = (SyntaxKind, &'input str)>> Parser<'input, I> {
|
||||||
self.handle_operation(&[Add, Sub], Self::parse_mul)
|
self.handle_operation(&[Add, Sub], Self::parse_mul)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn parse(mut self) -> (SyntaxNode, impl Resolver) {
|
fn parse(mut self) -> (SyntaxNode, impl Resolver + use<I>) {
|
||||||
self.builder.start_node(Root);
|
self.builder.start_node(Root);
|
||||||
self.parse_add();
|
self.parse_add();
|
||||||
self.builder.finish_node();
|
self.builder.finish_node();
|
||||||
|
|
|
@ -208,7 +208,7 @@ impl<'input> Parser<'input> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn finish(mut self) -> (GreenNode, impl Interner) {
|
pub fn finish(mut self) -> (GreenNode, impl Interner + use<>) {
|
||||||
assert!(self.lexer.next().map(|t| t == Token::EoF).unwrap_or(true));
|
assert!(self.lexer.next().map(|t| t == Token::EoF).unwrap_or(true));
|
||||||
let (tree, cache) = self.builder.finish();
|
let (tree, cache) = self.builder.finish();
|
||||||
(tree, cache.unwrap().into_interner().unwrap())
|
(tree, cache.unwrap().into_interner().unwrap())
|
||||||
|
|
|
@ -62,7 +62,7 @@ struct Parse<I> {
|
||||||
/// Now, let's write a parser.
|
/// Now, let's write a parser.
|
||||||
/// Note that `parse` does not return a `Result`:
|
/// Note that `parse` does not return a `Result`:
|
||||||
/// By design, syntax trees can be built even for completely invalid source code.
|
/// By design, syntax trees can be built even for completely invalid source code.
|
||||||
fn parse(text: &str) -> Parse<impl Resolver> {
|
fn parse(text: &str) -> Parse<impl Resolver + use<>> {
|
||||||
struct Parser<'input> {
|
struct Parser<'input> {
|
||||||
/// input tokens, including whitespace.
|
/// input tokens, including whitespace.
|
||||||
tokens: VecDeque<(SyntaxKind, &'input str)>,
|
tokens: VecDeque<(SyntaxKind, &'input str)>,
|
||||||
|
@ -83,7 +83,7 @@ fn parse(text: &str) -> Parse<impl Resolver> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Parser<'_> {
|
impl Parser<'_> {
|
||||||
fn parse(mut self) -> Parse<impl Resolver> {
|
fn parse(mut self) -> Parse<impl Resolver + use<>> {
|
||||||
// Make sure that the root node covers all source
|
// Make sure that the root node covers all source
|
||||||
self.builder.start_node(Root);
|
self.builder.start_node(Root);
|
||||||
// Parse zero or more S-expressions
|
// Parse zero or more S-expressions
|
||||||
|
|
|
@ -4,11 +4,12 @@ use rustc_hash::{FxHashMap, FxHasher};
|
||||||
use text_size::TextSize;
|
use text_size::TextSize;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
RawSyntaxKind,
|
||||||
|
Syntax,
|
||||||
green::{GreenElement, GreenNode, GreenToken},
|
green::{GreenElement, GreenNode, GreenToken},
|
||||||
interning::{new_interner, Interner, TokenInterner, TokenKey},
|
interning::{Interner, TokenInterner, TokenKey, new_interner},
|
||||||
util::NodeOrToken,
|
util::NodeOrToken,
|
||||||
utility_types::MaybeOwned,
|
utility_types::MaybeOwned,
|
||||||
RawSyntaxKind, Syntax,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{node::GreenNodeHead, token::GreenTokenData};
|
use super::{node::GreenNodeHead, token::GreenTokenData};
|
||||||
|
|
|
@ -5,10 +5,10 @@ use std::{fmt, hash, mem};
|
||||||
type ErasedPtr = *const u8;
|
type ErasedPtr = *const u8;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
RawSyntaxKind,
|
||||||
green::{GreenNode, GreenToken},
|
green::{GreenNode, GreenToken},
|
||||||
text::TextSize,
|
text::TextSize,
|
||||||
util::NodeOrToken,
|
util::NodeOrToken,
|
||||||
RawSyntaxKind,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
pub(super) type GreenElement = NodeOrToken<GreenNode, GreenToken>;
|
pub(super) type GreenElement = NodeOrToken<GreenNode, GreenToken>;
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use std::{iter::FusedIterator, slice};
|
use std::{iter::FusedIterator, slice};
|
||||||
|
|
||||||
use super::{element::PackedGreenElement, GreenElementRef};
|
use super::{GreenElementRef, element::PackedGreenElement};
|
||||||
|
|
||||||
/// An iterator over a [`GreenNode`](crate::green::GreenNode)'s children.
|
/// An iterator over a [`GreenNode`](crate::green::GreenNode)'s children.
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
|
|
|
@ -6,9 +6,9 @@ use std::{
|
||||||
use rustc_hash::FxHasher;
|
use rustc_hash::FxHasher;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
green::{iter::GreenNodeChildren, GreenElement, PackedGreenElement},
|
|
||||||
text::TextSize,
|
|
||||||
RawSyntaxKind,
|
RawSyntaxKind,
|
||||||
|
green::{GreenElement, PackedGreenElement, iter::GreenNodeChildren},
|
||||||
|
text::TextSize,
|
||||||
};
|
};
|
||||||
use triomphe::{Arc, HeaderWithLength, ThinArc};
|
use triomphe::{Arc, HeaderWithLength, ThinArc};
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
use std::{fmt, hash, mem::ManuallyDrop, ptr::NonNull};
|
use std::{fmt, hash, mem::ManuallyDrop, ptr::NonNull};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
RawSyntaxKind,
|
||||||
interning::{Resolver, TokenKey},
|
interning::{Resolver, TokenKey},
|
||||||
text::TextSize,
|
text::TextSize,
|
||||||
RawSyntaxKind,
|
|
||||||
};
|
};
|
||||||
use triomphe::Arc;
|
use triomphe::Arc;
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,8 @@ use core::fmt;
|
||||||
use std::hash::{BuildHasher, Hash};
|
use std::hash::{BuildHasher, Hash};
|
||||||
|
|
||||||
use crate::interning::{
|
use crate::interning::{
|
||||||
traits::{InternKey, Interner, Resolver},
|
|
||||||
TokenKey,
|
TokenKey,
|
||||||
|
traits::{InternKey, Interner, Resolver},
|
||||||
};
|
};
|
||||||
|
|
||||||
// Safety: `InternKey` has the same invariant as `lasso::Key`
|
// Safety: `InternKey` has the same invariant as `lasso::Key`
|
||||||
|
|
|
@ -135,10 +135,11 @@ pub mod build {
|
||||||
/// A convenient collection of the most used parts of `cstree`.
|
/// A convenient collection of the most used parts of `cstree`.
|
||||||
pub mod prelude {
|
pub mod prelude {
|
||||||
pub use crate::{
|
pub use crate::{
|
||||||
|
RawSyntaxKind,
|
||||||
|
Syntax,
|
||||||
build::GreenNodeBuilder,
|
build::GreenNodeBuilder,
|
||||||
green::{GreenNode, GreenToken},
|
green::{GreenNode, GreenToken},
|
||||||
syntax::{SyntaxElement, SyntaxNode, SyntaxToken},
|
syntax::{SyntaxElement, SyntaxNode, SyntaxToken},
|
||||||
RawSyntaxKind, Syntax,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,19 @@
|
||||||
//! Serialization and Deserialization for syntax trees.
|
//! Serialization and Deserialization for syntax trees.
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
RawSyntaxKind,
|
||||||
|
Syntax,
|
||||||
build::GreenNodeBuilder,
|
build::GreenNodeBuilder,
|
||||||
interning::{Resolver, TokenKey},
|
interning::{Resolver, TokenKey},
|
||||||
syntax::{ResolvedNode, SyntaxNode},
|
syntax::{ResolvedNode, SyntaxNode},
|
||||||
traversal::WalkEvent,
|
traversal::WalkEvent,
|
||||||
util::NodeOrToken,
|
util::NodeOrToken,
|
||||||
RawSyntaxKind, Syntax,
|
|
||||||
};
|
};
|
||||||
use serde::{
|
use serde::{
|
||||||
|
Deserialize,
|
||||||
|
Serialize,
|
||||||
de::{Error, SeqAccess, Visitor},
|
de::{Error, SeqAccess, Visitor},
|
||||||
ser::SerializeTuple,
|
ser::SerializeTuple,
|
||||||
Deserialize, Serialize,
|
|
||||||
};
|
};
|
||||||
use std::{collections::VecDeque, fmt, marker::PhantomData};
|
use std::{collections::VecDeque, fmt, marker::PhantomData};
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,11 @@ use text_size::{TextRange, TextSize};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
RawSyntaxKind,
|
||||||
|
Syntax,
|
||||||
green::GreenElementRef,
|
green::GreenElementRef,
|
||||||
interning::{Resolver, TokenKey},
|
interning::{Resolver, TokenKey},
|
||||||
util::{NodeOrToken, TokenAtOffset},
|
util::{NodeOrToken, TokenAtOffset},
|
||||||
RawSyntaxKind, Syntax,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// An element of the tree, can be either a node or a token.
|
/// An element of the tree, can be either a node or a token.
|
||||||
|
|
|
@ -5,9 +5,9 @@ use std::iter::FusedIterator;
|
||||||
use text_size::TextSize;
|
use text_size::TextSize;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
Syntax,
|
||||||
green::{GreenElementRef, GreenNodeChildren},
|
green::{GreenElementRef, GreenNodeChildren},
|
||||||
syntax::{SyntaxElementRef, SyntaxNode},
|
syntax::{SyntaxElementRef, SyntaxNode},
|
||||||
Syntax,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
|
|
|
@ -2,12 +2,13 @@ use super::*;
|
||||||
#[cfg(feature = "serialize")]
|
#[cfg(feature = "serialize")]
|
||||||
use crate::serde_impls::{SerializeWithData, SerializeWithResolver};
|
use crate::serde_impls::{SerializeWithData, SerializeWithResolver};
|
||||||
use crate::{
|
use crate::{
|
||||||
|
RawSyntaxKind,
|
||||||
|
Syntax,
|
||||||
green::{GreenElementRef, GreenNode},
|
green::{GreenElementRef, GreenNode},
|
||||||
interning::{Resolver, TokenKey},
|
interning::{Resolver, TokenKey},
|
||||||
text::*,
|
text::*,
|
||||||
traversal::*,
|
traversal::*,
|
||||||
util::*,
|
util::*,
|
||||||
RawSyntaxKind, Syntax,
|
|
||||||
};
|
};
|
||||||
use parking_lot::RwLock;
|
use parking_lot::RwLock;
|
||||||
use std::{
|
use std::{
|
||||||
|
@ -17,8 +18,8 @@ use std::{
|
||||||
iter,
|
iter,
|
||||||
ptr::{self, NonNull},
|
ptr::{self, NonNull},
|
||||||
sync::{
|
sync::{
|
||||||
atomic::{AtomicU32, Ordering},
|
|
||||||
Arc as StdArc,
|
Arc as StdArc,
|
||||||
|
atomic::{AtomicU32, Ordering},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use triomphe::Arc;
|
use triomphe::Arc;
|
||||||
|
|
|
@ -13,12 +13,13 @@ use std::{
|
||||||
use text_size::{TextRange, TextSize};
|
use text_size::{TextRange, TextSize};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
RawSyntaxKind,
|
||||||
|
Syntax,
|
||||||
green::GreenNode,
|
green::GreenNode,
|
||||||
interning::{Resolver, TokenKey},
|
interning::{Resolver, TokenKey},
|
||||||
syntax::*,
|
syntax::*,
|
||||||
traversal::*,
|
traversal::*,
|
||||||
util::*,
|
util::*,
|
||||||
RawSyntaxKind, Syntax,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Syntax tree node that is guaranteed to belong to a tree that contains an associated
|
/// Syntax tree node that is guaranteed to belong to a tree that contains an associated
|
||||||
|
@ -35,7 +36,7 @@ impl<S: Syntax, D> ResolvedNode<S, D> {
|
||||||
/// # Safety:
|
/// # Safety:
|
||||||
/// `syntax` must belong to a tree that contains an associated inline resolver.
|
/// `syntax` must belong to a tree that contains an associated inline resolver.
|
||||||
pub(super) unsafe fn coerce_ref(syntax: &SyntaxNode<S, D>) -> &Self {
|
pub(super) unsafe fn coerce_ref(syntax: &SyntaxNode<S, D>) -> &Self {
|
||||||
&*(syntax as *const _ as *const Self)
|
unsafe { &*(syntax as *const _ as *const Self) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns this node as a [`SyntaxNode`].
|
/// Returns this node as a [`SyntaxNode`].
|
||||||
|
@ -91,7 +92,7 @@ impl<S: Syntax, D> ResolvedToken<S, D> {
|
||||||
/// # Safety:
|
/// # Safety:
|
||||||
/// `syntax` must belong to a tree that contains an associated inline resolver.
|
/// `syntax` must belong to a tree that contains an associated inline resolver.
|
||||||
pub(super) unsafe fn coerce_ref(syntax: &SyntaxToken<S, D>) -> &Self {
|
pub(super) unsafe fn coerce_ref(syntax: &SyntaxToken<S, D>) -> &Self {
|
||||||
&*(syntax as *const _ as *const Self)
|
unsafe { &*(syntax as *const _ as *const Self) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns this token as a [`SyntaxToken`].
|
/// Returns this token as a [`SyntaxToken`].
|
||||||
|
@ -172,9 +173,11 @@ impl<'a, S: Syntax, D> ResolvedElementRef<'a, S, D> {
|
||||||
/// # Safety:
|
/// # Safety:
|
||||||
/// `syntax` must belong to a tree that contains an associated inline resolver.
|
/// `syntax` must belong to a tree that contains an associated inline resolver.
|
||||||
pub(super) unsafe fn coerce_ref(syntax: SyntaxElementRef<'a, S, D>) -> Self {
|
pub(super) unsafe fn coerce_ref(syntax: SyntaxElementRef<'a, S, D>) -> Self {
|
||||||
match syntax {
|
unsafe {
|
||||||
NodeOrToken::Node(node) => Self::Node(ResolvedNode::coerce_ref(node)),
|
match syntax {
|
||||||
NodeOrToken::Token(token) => Self::Token(ResolvedToken::coerce_ref(token)),
|
NodeOrToken::Node(node) => Self::Node(ResolvedNode::coerce_ref(node)),
|
||||||
|
NodeOrToken::Token(token) => Self::Token(ResolvedToken::coerce_ref(token)),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
|
Syntax,
|
||||||
interning::{Resolver, TokenKey},
|
interning::{Resolver, TokenKey},
|
||||||
syntax::{SyntaxNode, SyntaxToken},
|
syntax::{SyntaxNode, SyntaxToken},
|
||||||
text::{TextRange, TextSize},
|
text::{TextRange, TextSize},
|
||||||
Syntax,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// An efficient representation of the text that is covered by a [`SyntaxNode`], i.e. the combined
|
/// An efficient representation of the text that is covered by a [`SyntaxNode`], i.e. the combined
|
||||||
|
@ -383,7 +383,7 @@ mod private {
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::{build::GreenNodeBuilder, interning::TokenInterner, RawSyntaxKind};
|
use crate::{RawSyntaxKind, build::GreenNodeBuilder, interning::TokenInterner};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
@ -409,7 +409,7 @@ mod tests {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_tree(chunks: &[&str]) -> (SyntaxNode<SyntaxKind, ()>, impl Resolver<TokenKey>) {
|
fn build_tree(chunks: &[&str]) -> (SyntaxNode<SyntaxKind, ()>, impl Resolver<TokenKey> + use<>) {
|
||||||
let mut builder: GreenNodeBuilder<SyntaxKind> = GreenNodeBuilder::new();
|
let mut builder: GreenNodeBuilder<SyntaxKind> = GreenNodeBuilder::new();
|
||||||
builder.start_node(SyntaxKind(62));
|
builder.start_node(SyntaxKind(62));
|
||||||
for &chunk in chunks.iter() {
|
for &chunk in chunks.iter() {
|
||||||
|
|
|
@ -9,10 +9,11 @@ use text_size::{TextRange, TextSize};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::{
|
use crate::{
|
||||||
|
RawSyntaxKind,
|
||||||
|
Syntax,
|
||||||
green::{GreenNode, GreenToken},
|
green::{GreenNode, GreenToken},
|
||||||
interning::{Resolver, TokenKey},
|
interning::{Resolver, TokenKey},
|
||||||
traversal::Direction,
|
traversal::Direction,
|
||||||
RawSyntaxKind, Syntax,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Syntax tree token.
|
/// Syntax tree token.
|
||||||
|
@ -284,7 +285,7 @@ impl<S: Syntax, D> SyntaxToken<S, D> {
|
||||||
/// implementation by re-using the interner in both.
|
/// implementation by re-using the interner in both.
|
||||||
/// ```
|
/// ```
|
||||||
/// # use cstree::testing::*;
|
/// # use cstree::testing::*;
|
||||||
/// use cstree::interning::{new_interner, TokenInterner, TokenKey};
|
/// use cstree::interning::{TokenInterner, TokenKey, new_interner};
|
||||||
/// struct TypeTable {
|
/// struct TypeTable {
|
||||||
/// // ...
|
/// // ...
|
||||||
/// }
|
/// }
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
use super::*;
|
use super::*;
|
||||||
use cstree::{
|
use cstree::{
|
||||||
build::{GreenNodeBuilder, NodeCache},
|
|
||||||
interning::{new_interner, Resolver},
|
|
||||||
text::TextRange,
|
|
||||||
RawSyntaxKind,
|
RawSyntaxKind,
|
||||||
|
build::{GreenNodeBuilder, NodeCache},
|
||||||
|
interning::{Resolver, new_interner},
|
||||||
|
text::TextRange,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn build_tree<D>(root: &Element<'_>) -> (SyntaxNode<D>, impl Resolver) {
|
fn build_tree<D>(root: &Element<'_>) -> (SyntaxNode<D>, impl Resolver + use<D>) {
|
||||||
let mut builder: GreenNodeBuilder<SyntaxKind> = GreenNodeBuilder::new();
|
let mut builder: GreenNodeBuilder<SyntaxKind> = GreenNodeBuilder::new();
|
||||||
build_recursive(root, &mut builder, 0);
|
build_recursive(root, &mut builder, 0);
|
||||||
let (node, cache) = builder.finish();
|
let (node, cache) = builder.finish();
|
||||||
|
|
|
@ -6,11 +6,12 @@ mod sendsync;
|
||||||
mod serde;
|
mod serde;
|
||||||
|
|
||||||
use cstree::{
|
use cstree::{
|
||||||
|
RawSyntaxKind,
|
||||||
|
Syntax,
|
||||||
build::{GreenNodeBuilder, NodeCache},
|
build::{GreenNodeBuilder, NodeCache},
|
||||||
green::GreenNode,
|
green::GreenNode,
|
||||||
interning::{Interner, Resolver},
|
interning::{Interner, Resolver},
|
||||||
util::NodeOrToken,
|
util::NodeOrToken,
|
||||||
RawSyntaxKind, Syntax,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
pub type SyntaxNode<D = ()> = cstree::syntax::SyntaxNode<SyntaxKind, D>;
|
pub type SyntaxNode<D = ()> = cstree::syntax::SyntaxNode<SyntaxKind, D>;
|
||||||
|
|
|
@ -3,13 +3,13 @@
|
||||||
use crossbeam_utils::thread::scope;
|
use crossbeam_utils::thread::scope;
|
||||||
use std::{thread, time::Duration};
|
use std::{thread, time::Duration};
|
||||||
|
|
||||||
use super::{build_recursive, Element, ResolvedNode, SyntaxKind, SyntaxNode};
|
use super::{Element, ResolvedNode, SyntaxKind, SyntaxNode, build_recursive};
|
||||||
use cstree::build::GreenNodeBuilder;
|
use cstree::build::GreenNodeBuilder;
|
||||||
|
|
||||||
// Excercise the multi-threaded interner when the corresponding feature is enabled.
|
// Excercise the multi-threaded interner when the corresponding feature is enabled.
|
||||||
|
|
||||||
#[cfg(feature = "multi_threaded_interning")]
|
#[cfg(feature = "multi_threaded_interning")]
|
||||||
use cstree::interning::{new_threaded_interner, MultiThreadedTokenInterner};
|
use cstree::interning::{MultiThreadedTokenInterner, new_threaded_interner};
|
||||||
|
|
||||||
#[cfg(not(feature = "multi_threaded_interning"))]
|
#[cfg(not(feature = "multi_threaded_interning"))]
|
||||||
fn get_builder() -> GreenNodeBuilder<'static, 'static, SyntaxKind> {
|
fn get_builder() -> GreenNodeBuilder<'static, 'static, SyntaxKind> {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::{build_recursive, build_tree_with_cache, ResolvedNode};
|
use crate::{ResolvedNode, build_recursive, build_tree_with_cache};
|
||||||
|
|
||||||
use super::{Element, SyntaxKind, SyntaxNode};
|
use super::{Element, SyntaxKind, SyntaxNode};
|
||||||
use cstree::{
|
use cstree::{
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
unstable_features = true
|
unstable_features = true
|
||||||
|
|
||||||
edition = "2021"
|
edition = "2024"
|
||||||
|
|
||||||
max_width = 120
|
max_width = 120
|
||||||
comment_width = 120
|
comment_width = 120
|
||||||
|
@ -10,6 +10,7 @@ format_code_in_doc_comments = true
|
||||||
format_macro_matchers = true
|
format_macro_matchers = true
|
||||||
|
|
||||||
imports_granularity = "Crate"
|
imports_granularity = "Crate"
|
||||||
|
imports_layout = "HorizontalVertical"
|
||||||
|
|
||||||
reorder_impl_items = true
|
reorder_impl_items = true
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue