git.delta.rocks / jrsonnet / refs/commits / da1c5af22cb6

difftreelog

fix remove unused code from rowan-parser

Yaroslav Bolyukin2024-03-03parent: #04bd9e4.patch.diff
in: master

3 files changed

modifiedcrates/jrsonnet-rowan-parser/src/event.rsdiffbeforeafterboth
before · crates/jrsonnet-rowan-parser/src/event.rs
1use std::{mem, num::NonZeroUsize};23use rowan::{GreenNodeBuilder, Language, TextRange, TextSize};45use crate::{6	lex::Lexeme,7	nodes::Trivia,8	parser::{LocatedSyntaxError, Parse, SyntaxError},9	AstToken, JsonnetLanguage, SyntaxKind,10};1112#[derive(Clone, Debug)]13pub enum Event {14	/// Used for unfinished markers15	Pending,16	/// After marker is completed, Pending event is replaced with Start17	Start {18		kind: SyntaxKind,19		/// If marker is preceded or wrapped - instead of reordering events, we20		/// insert start event in the end of events Vec instead, and store relative offset to this event here21		forward_parent: Option<NonZeroUsize>,22	},23	/// Eat token24	Token { kind: SyntaxKind },25	/// Push token, but do not eat anything,26	VirtualToken { kind: SyntaxKind },27	/// Position of finished node28	Finish {29		/// Same as forward_parent of Start, but for wrapping30		wrapper: Option<NonZeroUsize>,31		error: Option<Box<SyntaxError>>,32	},33	/// Used for dropped markers and other things34	Noop,35}3637pub(super) struct Sink<'i> {38	pub builder: GreenNodeBuilder<'static>,39	lexemes: &'i [Lexeme<'i>],40	offset: usize,41	events: Vec<Event>,42	pub errors: Vec<LocatedSyntaxError>,43}4445impl<'i> Sink<'i> {46	pub(super) fn new(events: Vec<Event>, lexemes: &'i [Lexeme<'i>]) -> Self {47		Self {48			builder: GreenNodeBuilder::new(),49			lexemes,50			offset: 0,51			events,52			errors: vec![],53		}54	}5556	fn text_offset(&self) -> TextSize {57		if self.offset == 0 {58			return 0.into();59		};60		if let Some(lex) = self.lexemes.get(self.offset) {61			lex.range.start()62		} else if let Some(lex) = self.lexemes.get(self.offset - 1) {63			lex.range.end()64		} else {65			panic!("hard oob")66		}67	}6869	pub(super) fn finish(mut self) -> Parse {70		let mut eat_start_whitespace = false;71		let mut depth = 0;72		let mut error_starts_at = Vec::new();73		for idx in 0..self.events.len() {74			match mem::replace(&mut self.events[idx], Event::Noop) {75				Event::Start {76					kind,77					forward_parent,78				} => {79					if depth != 0 {80						self.skip_whitespace();81					}82					let mut kinds = vec![kind];8384					let mut idx = idx;85					let mut forward_parent = forward_parent;8687					// Walk through the forward parent of the forward parent, and the forward parent88					// of that, and of that, etc. until we reach a StartNode event without a forward89					// parent.90					while let Some(fp) = forward_parent {91						idx += fp.get();9293						forward_parent = if let Event::Start {94							kind,95							forward_parent,96						} = mem::replace(&mut self.events[idx], Event::Noop)97						{98							kinds.push(kind);99							forward_parent100						} else {101							unreachable!()102						};103					}104105					for kind in kinds.into_iter().rev() {106						self.builder.start_node(JsonnetLanguage::kind_to_raw(kind));107						depth += 1;108						if depth == 1 {109							self.skip_whitespace();110						}111						error_starts_at.push(self.text_offset());112					}113114					eat_start_whitespace = false;115				}116				Event::Token { kind } => {117					if eat_start_whitespace {118						self.skip_whitespace();119					}120					self.token(kind);121					eat_start_whitespace = true;122				}123				Event::VirtualToken { kind } => {124					if eat_start_whitespace {125						self.skip_whitespace();126					}127					self.virtual_token(kind);128					eat_start_whitespace = false;129				}130				Event::Finish { wrapper, error } => {131					if depth == 1 {132						self.skip_whitespace();133					}134					let range = (135						error_starts_at.pop().expect("starts == finishes"),136						self.text_offset(),137					);138					if let Some(error) = error {139						self.errors.push(LocatedSyntaxError {140							error: *error,141							range: TextRange::new(range.0, range.1),142						})143					}144					self.builder.finish_node();145					depth -= 1;146					let mut idx = idx;147					let mut wrapper = wrapper;148					while let Some(w) = wrapper {149						idx += w.get();150						wrapper = if let Event::Finish { wrapper, error } =151							mem::replace(&mut self.events[idx], Event::Noop)152						{153							let range = (154								error_starts_at.pop().expect("starts == finishes"),155								self.text_offset(),156							);157							if let Some(error) = error {158								self.errors.push(LocatedSyntaxError {159									error: *error,160									range: TextRange::new(range.0, range.1),161								})162							}163164							if depth == 1 {165								self.skip_whitespace();166							}167							self.builder.finish_node();168							depth -= 1;169							wrapper170						} else {171							unreachable!()172						}173					}174					eat_start_whitespace = true;175				}176				Event::Pending => panic!("pending event should not appear in finished events"),177				Event::Noop => {}178			}179		}180181		Parse {182			green_node: self.builder.finish(),183			errors: self.errors,184		}185	}186	fn virtual_token(&mut self, kind: SyntaxKind) {187		self.builder.token(JsonnetLanguage::kind_to_raw(kind), "")188	}189	fn token(&mut self, kind: SyntaxKind) {190		let lexeme = self.lexemes[self.offset];191		self.builder192			.token(JsonnetLanguage::kind_to_raw(kind), lexeme.text);193		self.offset += 1;194	}195	fn skip_whitespace(&mut self) {196		while let Some(lexeme) = self.lexemes.get(self.offset) {197			if !Trivia::can_cast(lexeme.kind) {198				break;199			}200201			self.token(lexeme.kind);202		}203	}204}
after · crates/jrsonnet-rowan-parser/src/event.rs
1use std::{mem, num::NonZeroUsize};23use rowan::{GreenNodeBuilder, Language, TextRange, TextSize};45use crate::{6	lex::Lexeme,7	nodes::Trivia,8	parser::{LocatedSyntaxError, Parse, SyntaxError},9	AstToken, JsonnetLanguage, SyntaxKind,10};1112#[derive(Clone, Debug)]13pub enum Event {14	/// Used for unfinished markers15	Pending,16	/// After marker is completed, Pending event is replaced with Start17	Start {18		kind: SyntaxKind,19		/// If marker is preceded or wrapped - instead of reordering events, we20		/// insert start event in the end of events Vec instead, and store relative offset to this event here21		forward_parent: Option<NonZeroUsize>,22	},23	/// Eat token24	Token { kind: SyntaxKind },25	/// Push token, but do not eat anything,26	// VirtualToken { kind: SyntaxKind },27	/// Position of finished node28	Finish {29		/// Same as forward_parent of Start, but for wrapping30		wrapper: Option<NonZeroUsize>,31		error: Option<Box<SyntaxError>>,32	},33	/// Used for dropped markers and other things34	Noop,35}3637pub(super) struct Sink<'i> {38	pub builder: GreenNodeBuilder<'static>,39	lexemes: &'i [Lexeme<'i>],40	offset: usize,41	events: Vec<Event>,42	pub errors: Vec<LocatedSyntaxError>,43}4445impl<'i> Sink<'i> {46	pub(super) fn new(events: Vec<Event>, lexemes: &'i [Lexeme<'i>]) -> Self {47		Self {48			builder: GreenNodeBuilder::new(),49			lexemes,50			offset: 0,51			events,52			errors: vec![],53		}54	}5556	fn text_offset(&self) -> TextSize {57		if self.offset == 0 {58			return 0.into();59		};60		if let Some(lex) = self.lexemes.get(self.offset) {61			lex.range.start()62		} else if let Some(lex) = self.lexemes.get(self.offset - 1) {63			lex.range.end()64		} else {65			panic!("hard oob")66		}67	}6869	pub(super) fn finish(mut self) -> Parse {70		let mut eat_start_whitespace = false;71		let mut depth = 0;72		let mut error_starts_at = Vec::new();73		for idx in 0..self.events.len() {74			match mem::replace(&mut self.events[idx], Event::Noop) {75				Event::Start {76					kind,77					forward_parent,78				} => {79					if depth != 0 {80						self.skip_whitespace();81					}82					let mut kinds = vec![kind];8384					let mut idx = idx;85					let mut forward_parent = forward_parent;8687					// Walk through the forward parent of the forward parent, and the forward parent88					// of that, and of that, etc. until we reach a StartNode event without a forward89					// parent.90					while let Some(fp) = forward_parent {91						idx += fp.get();9293						forward_parent = if let Event::Start {94							kind,95							forward_parent,96						} = mem::replace(&mut self.events[idx], Event::Noop)97						{98							kinds.push(kind);99							forward_parent100						} else {101							unreachable!()102						};103					}104105					for kind in kinds.into_iter().rev() {106						self.builder.start_node(JsonnetLanguage::kind_to_raw(kind));107						depth += 1;108						if depth == 1 {109							self.skip_whitespace();110						}111						error_starts_at.push(self.text_offset());112					}113114					eat_start_whitespace = false;115				}116				Event::Token { kind } => {117					if eat_start_whitespace {118						self.skip_whitespace();119					}120					self.token(kind);121					eat_start_whitespace = true;122				}123				// Event::VirtualToken { kind } => {124				// 	if eat_start_whitespace {125				// 		self.skip_whitespace();126				// 	}127				// 	self.virtual_token(kind);128				// 	eat_start_whitespace = false;129				// }130				Event::Finish { wrapper, error } => {131					if depth == 1 {132						self.skip_whitespace();133					}134					let range = (135						error_starts_at.pop().expect("starts == finishes"),136						self.text_offset(),137					);138					if let Some(error) = error {139						self.errors.push(LocatedSyntaxError {140							error: *error,141							range: TextRange::new(range.0, range.1),142						})143					}144					self.builder.finish_node();145					depth -= 1;146					let mut idx = idx;147					let mut wrapper = wrapper;148					while let Some(w) = wrapper {149						idx += w.get();150						wrapper = if let Event::Finish { wrapper, error } =151							mem::replace(&mut self.events[idx], Event::Noop)152						{153							let range = (154								error_starts_at.pop().expect("starts == finishes"),155								self.text_offset(),156							);157							if let Some(error) = error {158								self.errors.push(LocatedSyntaxError {159									error: *error,160									range: TextRange::new(range.0, range.1),161								})162							}163164							if depth == 1 {165								self.skip_whitespace();166							}167							self.builder.finish_node();168							depth -= 1;169							wrapper170						} else {171							unreachable!()172						}173					}174					eat_start_whitespace = true;175				}176				Event::Pending => panic!("pending event should not appear in finished events"),177				Event::Noop => {}178			}179		}180181		Parse {182			green_node: self.builder.finish(),183			errors: self.errors,184		}185	}186	// fn virtual_token(&mut self, kind: SyntaxKind) {187	// 	self.builder.token(JsonnetLanguage::kind_to_raw(kind), "")188	// }189	fn token(&mut self, kind: SyntaxKind) {190		let lexeme = self.lexemes[self.offset];191		self.builder192			.token(JsonnetLanguage::kind_to_raw(kind), lexeme.text);193		self.offset += 1;194	}195	fn skip_whitespace(&mut self) {196		while let Some(lexeme) = self.lexemes.get(self.offset) {197			if !Trivia::can_cast(lexeme.kind) {198				break;199			}200201			self.token(lexeme.kind);202		}203	}204}
modifiedcrates/jrsonnet-rowan-parser/src/marker.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/marker.rs
+++ b/crates/jrsonnet-rowan-parser/src/marker.rs
@@ -8,17 +8,17 @@
 	SyntaxKind,
 };
 
-pub struct Ranger {
-	pub pos: usize,
-}
-impl Ranger {
-	pub fn finish(self, p: &Parser) -> FinishedRanger {
-		FinishedRanger {
-			start_token: self.pos,
-			end_token: self.pos.max(p.offset.saturating_sub(1)),
-		}
-	}
-}
+// pub struct Ranger {
+// 	pub pos: usize,
+// }
+// impl Ranger {
+// 	pub fn finish(self, p: &Parser) -> FinishedRanger {
+// 		FinishedRanger {
+// 			start_token: self.pos,
+// 			end_token: self.pos.max(p.offset.saturating_sub(1)),
+// 		}
+// 	}
+// }
 
 pub struct FinishedRanger {
 	pub start_token: usize,
@@ -79,10 +79,10 @@
 			finish_event_idx,
 		}
 	}
-	pub fn complete(mut self, p: &mut Parser, kind: SyntaxKind) -> CompletedMarker {
+	pub fn complete(self, p: &mut Parser, kind: SyntaxKind) -> CompletedMarker {
 		self.complete_raw(p, kind, None)
 	}
-	pub fn complete_error(mut self, p: &mut Parser, msg: impl AsRef<str>) -> CompletedMarker {
+	pub fn complete_error(self, p: &mut Parser, msg: impl AsRef<str>) -> CompletedMarker {
 		self.complete_raw(
 			p,
 			SyntaxKind::ERROR_CUSTOM,
@@ -91,7 +91,7 @@
 			}),
 		)
 	}
-	pub fn complete_missing(mut self, p: &mut Parser, expected: ExpectedSyntax) -> CompletedMarker {
+	pub fn complete_missing(self, p: &mut Parser, expected: ExpectedSyntax) -> CompletedMarker {
 		self.complete_raw(
 			p,
 			SyntaxKind::ERROR_MISSING_TOKEN,
@@ -99,7 +99,7 @@
 		)
 	}
 	pub fn complete_unexpected(
-		mut self,
+		self,
 		p: &mut Parser,
 		expected: ExpectedSyntax,
 		found: SyntaxKind,
modifiedcrates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth
--- a/crates/jrsonnet-rowan-parser/src/parser.rs
+++ b/crates/jrsonnet-rowan-parser/src/parser.rs
@@ -5,7 +5,7 @@
 
 use crate::{
 	event::Event,
-	marker::{CompletedMarker, Marker, Ranger},
+	marker::{CompletedMarker, Marker},
 	nodes::{BinaryOperatorKind, Literal, Number, Text, UnaryOperatorKind},
 	token_set::SyntaxKindSet,
 	AstToken, SyntaxKind,
@@ -107,10 +107,10 @@
 		self.entered += 1;
 		Marker::new(start_event_idx)
 	}
-	pub fn start_ranger(&mut self) -> Ranger {
-		let pos = self.offset;
-		Ranger { pos }
-	}
+	// pub fn start_ranger(&mut self) -> Ranger {
+	// 	let pos = self.offset;
+	// 	Ranger { pos }
+	// }
 	pub fn parse(mut self) -> Vec<Event> {
 		let m = self.start();
 		expr(&mut self);
@@ -144,13 +144,13 @@
 		}
 	}
 
-	pub(crate) fn expect_with_no_skip(&mut self, kind: SyntaxKind) {
-		if self.at(kind) {
-			self.bump();
-		} else {
-			self.error_with_no_skip();
-		}
-	}
+	// pub(crate) fn expect_with_no_skip(&mut self, kind: SyntaxKind) {
+	// 	if self.at(kind) {
+	// 		self.bump();
+	// 	} else {
+	// 		self.error_with_no_skip();
+	// 	}
+	// }
 	pub fn error_with_no_skip(&mut self) -> CompletedMarker {
 		self.error_with_recovery_set(SyntaxKindSet::ALL)
 	}
@@ -773,18 +773,18 @@
 		m.complete(p, DESTRUCT_SKIP)
 	} else if p.at(T!['[']) {
 		p.bump();
-		let mut had_rest = false;
+		// let mut had_rest = false;
 		loop {
 			if p.at(T![']']) {
 				p.bump();
 				break;
 			} else if p.at(T![...]) {
-				let m_err = p.start_ranger();
+				// let m_err = p.start_ranger();
 				destruct_rest(p);
 				// if had_rest {
 				// 	p.custom_error(m_err.finish(p), "only one rest can be present in array");
 				// }
-				had_rest = true;
+				// had_rest = true;
 			} else {
 				destruct(p);
 			}
@@ -804,7 +804,7 @@
 				p.bump();
 				break;
 			} else if p.at(T![...]) {
-				let m_err = p.start_ranger();
+				// let m_err = p.start_ranger();
 				destruct_rest(p);
 				// if had_rest {
 				// 	p.custom_error(m_err.finish(p), "only one rest can be present in object");