mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-27 01:04:03 +00:00
Rollup merge of #60995 - topecongiro:parser-from-stream-and-base-dir, r=michaelwoerister
Add stream_to_parser_with_base_dir This PR adds `stream_to_parser_with_base_dir`, which creates a parser from a token stream and a base directory. Context: I would like to parse `cfg_if!` macro and get a list of modules defined inside it from rustfmt so that rustfmt can format those modules (cc https://github.com/rust-lang/rustfmt/issues/3253). To do so, I need to create a parser from `TokenStream` and set the directory of `Parser` to the same directory as the parent directory of a file which contains `cfg_if!` invocation. AFAIK there is no way to achieve this, and hence this PR. Alternatively, I could change the visibility of `Parser.directory` from `crate` to `pub` so that the value can be modified after initializing a parser. I don't have a preference over either approach (or others, as long as it works).
This commit is contained in:
commit
3c9ac30dd9
@ -332,6 +332,23 @@ pub fn stream_to_parser(sess: &ParseSess, stream: TokenStream) -> Parser<'_> {
|
||||
Parser::new(sess, stream, None, true, false)
|
||||
}
|
||||
|
||||
/// Given stream, the `ParseSess` and the base directory, produces a parser.
|
||||
///
|
||||
/// Use this function when you are creating a parser from the token stream
|
||||
/// and also care about the current working directory of the parser (e.g.,
|
||||
/// you are trying to resolve modules defined inside a macro invocation).
|
||||
///
|
||||
/// # Note
|
||||
///
|
||||
/// The main usage of this function is outside of rustc, for those who uses
|
||||
/// libsyntax as a library. Please do not remove this function while refactoring
|
||||
/// just because it is not used in rustc codebase!
|
||||
pub fn stream_to_parser_with_base_dir<'a>(sess: &'a ParseSess,
|
||||
stream: TokenStream,
|
||||
base_dir: Directory<'a>) -> Parser<'a> {
|
||||
Parser::new(sess, stream, Some(base_dir), true, false)
|
||||
}
|
||||
|
||||
/// A sequence separator.
|
||||
pub struct SeqSep {
|
||||
/// The seperator token.
|
||||
|
Loading…
Reference in New Issue
Block a user