Move make_unclosed_delims_error to lexer/diagonostics.rs
Signed-off-by: xizheyin <xizheyin@smail.nju.edu.cn>
This commit is contained in:
@@ -1,9 +1,12 @@
|
|||||||
use rustc_ast::token::Delimiter;
|
use rustc_ast::token::Delimiter;
|
||||||
use rustc_errors::Diag;
|
use rustc_errors::Diag;
|
||||||
|
use rustc_session::parse::ParseSess;
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_span::source_map::SourceMap;
|
use rustc_span::source_map::SourceMap;
|
||||||
|
|
||||||
use super::UnmatchedDelim;
|
use super::UnmatchedDelim;
|
||||||
|
use crate::errors::MismatchedClosingDelimiter;
|
||||||
|
use crate::pprust;
|
||||||
|
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub(super) struct TokenTreeDiagInfo {
|
pub(super) struct TokenTreeDiagInfo {
|
||||||
@@ -116,3 +119,24 @@ pub(super) fn report_suspicious_mismatch_block(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) fn make_unclosed_delims_error(
|
||||||
|
unmatched: UnmatchedDelim,
|
||||||
|
psess: &ParseSess,
|
||||||
|
) -> Option<Diag<'_>> {
|
||||||
|
// `None` here means an `Eof` was found. We already emit those errors elsewhere, we add them to
|
||||||
|
// `unmatched_delims` only for error recovery in the `Parser`.
|
||||||
|
let found_delim = unmatched.found_delim?;
|
||||||
|
let mut spans = vec![unmatched.found_span];
|
||||||
|
if let Some(sp) = unmatched.unclosed_span {
|
||||||
|
spans.push(sp);
|
||||||
|
};
|
||||||
|
let err = psess.dcx().create_err(MismatchedClosingDelimiter {
|
||||||
|
spans,
|
||||||
|
delimiter: pprust::token_kind_to_string(&found_delim.as_close_token_kind()).to_string(),
|
||||||
|
unmatched: unmatched.found_span,
|
||||||
|
opening_candidate: unmatched.candidate_span,
|
||||||
|
unclosed: unmatched.unclosed_span,
|
||||||
|
});
|
||||||
|
Some(err)
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
use std::ops::Range;
|
use std::ops::Range;
|
||||||
|
|
||||||
|
use diagnostics::make_unclosed_delims_error;
|
||||||
use rustc_ast::ast::{self, AttrStyle};
|
use rustc_ast::ast::{self, AttrStyle};
|
||||||
use rustc_ast::token::{self, CommentKind, Delimiter, IdentIsRaw, Token, TokenKind};
|
use rustc_ast::token::{self, CommentKind, Delimiter, IdentIsRaw, Token, TokenKind};
|
||||||
use rustc_ast::tokenstream::TokenStream;
|
use rustc_ast::tokenstream::TokenStream;
|
||||||
@@ -17,9 +18,9 @@ use rustc_session::parse::ParseSess;
|
|||||||
use rustc_span::{BytePos, Pos, Span, Symbol};
|
use rustc_span::{BytePos, Pos, Span, Symbol};
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
|
use crate::errors;
|
||||||
use crate::lexer::diagnostics::TokenTreeDiagInfo;
|
use crate::lexer::diagnostics::TokenTreeDiagInfo;
|
||||||
use crate::lexer::unicode_chars::UNICODE_ARRAY;
|
use crate::lexer::unicode_chars::UNICODE_ARRAY;
|
||||||
use crate::{errors, make_unclosed_delims_error};
|
|
||||||
|
|
||||||
mod diagnostics;
|
mod diagnostics;
|
||||||
mod tokentrees;
|
mod tokentrees;
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ pub const MACRO_ARGUMENTS: Option<&str> = Some("macro arguments");
|
|||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
pub mod parser;
|
pub mod parser;
|
||||||
use parser::{Parser, make_unclosed_delims_error};
|
use parser::Parser;
|
||||||
pub mod lexer;
|
pub mod lexer;
|
||||||
pub mod validate_attr;
|
pub mod validate_attr;
|
||||||
|
|
||||||
|
|||||||
@@ -43,11 +43,8 @@ use token_type::TokenTypeSet;
|
|||||||
pub use token_type::{ExpKeywordPair, ExpTokenPair, TokenType};
|
pub use token_type::{ExpKeywordPair, ExpTokenPair, TokenType};
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
use crate::errors::{
|
use crate::errors::{self, IncorrectVisibilityRestriction, NonStringAbiLiteral};
|
||||||
self, IncorrectVisibilityRestriction, MismatchedClosingDelimiter, NonStringAbiLiteral,
|
|
||||||
};
|
|
||||||
use crate::exp;
|
use crate::exp;
|
||||||
use crate::lexer::UnmatchedDelim;
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests;
|
mod tests;
|
||||||
@@ -1745,27 +1742,6 @@ impl<'a> Parser<'a> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn make_unclosed_delims_error(
|
|
||||||
unmatched: UnmatchedDelim,
|
|
||||||
psess: &ParseSess,
|
|
||||||
) -> Option<Diag<'_>> {
|
|
||||||
// `None` here means an `Eof` was found. We already emit those errors elsewhere, we add them to
|
|
||||||
// `unmatched_delims` only for error recovery in the `Parser`.
|
|
||||||
let found_delim = unmatched.found_delim?;
|
|
||||||
let mut spans = vec![unmatched.found_span];
|
|
||||||
if let Some(sp) = unmatched.unclosed_span {
|
|
||||||
spans.push(sp);
|
|
||||||
};
|
|
||||||
let err = psess.dcx().create_err(MismatchedClosingDelimiter {
|
|
||||||
spans,
|
|
||||||
delimiter: pprust::token_kind_to_string(&found_delim.as_close_token_kind()).to_string(),
|
|
||||||
unmatched: unmatched.found_span,
|
|
||||||
opening_candidate: unmatched.candidate_span,
|
|
||||||
unclosed: unmatched.unclosed_span,
|
|
||||||
});
|
|
||||||
Some(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A helper struct used when building an `AttrTokenStream` from
|
/// A helper struct used when building an `AttrTokenStream` from
|
||||||
/// a `LazyAttrTokenStream`. Both delimiter and non-delimited tokens
|
/// a `LazyAttrTokenStream`. Both delimiter and non-delimited tokens
|
||||||
/// are stored as `FlatToken::Token`. A vector of `FlatToken`s
|
/// are stored as `FlatToken::Token`. A vector of `FlatToken`s
|
||||||
|
|||||||
Reference in New Issue
Block a user