From a1c187eef3ba08076aedb5154929f7eda8d1b424 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 12 Aug 2020 18:26:51 +0200 Subject: Rename ra_syntax -> syntax --- crates/syntax/src/syntax_error.rs | 44 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 crates/syntax/src/syntax_error.rs (limited to 'crates/syntax/src/syntax_error.rs') diff --git a/crates/syntax/src/syntax_error.rs b/crates/syntax/src/syntax_error.rs new file mode 100644 index 00000000000..7c4511fece0 --- /dev/null +++ b/crates/syntax/src/syntax_error.rs @@ -0,0 +1,44 @@ +//! See docs for `SyntaxError`. + +use std::fmt; + +use crate::{TextRange, TextSize}; + +/// Represents the result of unsuccessful tokenization, parsing +/// or tree validation. +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct SyntaxError(String, TextRange); + +// FIXME: there was an unused SyntaxErrorKind previously (before this enum was removed) +// It was introduced in this PR: https://github.com/rust-analyzer/rust-analyzer/pull/846/files#diff-827da9b03b8f9faa1bade5cdd44d5dafR95 +// but it was not removed by a mistake. +// +// So, we need to find a place where to stick validation for attributes in match clauses. +// Code before refactor: +// InvalidMatchInnerAttr => { +// write!(f, "Inner attributes are only allowed directly after the opening brace of the match expression") +// } + +impl SyntaxError { + pub fn new(message: impl Into, range: TextRange) -> Self { + Self(message.into(), range) + } + pub fn new_at_offset(message: impl Into, offset: TextSize) -> Self { + Self(message.into(), TextRange::empty(offset)) + } + + pub fn range(&self) -> TextRange { + self.1 + } + + pub fn with_range(mut self, range: TextRange) -> Self { + self.1 = range; + self + } +} + +impl fmt::Display for SyntaxError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + self.0.fmt(f) + } +} -- cgit 1.4.1-3-g733a5