mirror of
				https://github.com/rust-lang/rust-analyzer.git
				synced 2025-11-03 13:13:18 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
//! This module allows building an SSR MatchFinder by parsing the SSR rule
 | 
						|
//! from a comment.
 | 
						|
 | 
						|
use ide_db::{
 | 
						|
    base_db::{FilePosition, FileRange, SourceDatabase},
 | 
						|
    RootDatabase,
 | 
						|
};
 | 
						|
use syntax::{
 | 
						|
    ast::{self, AstNode, AstToken},
 | 
						|
    TextRange,
 | 
						|
};
 | 
						|
 | 
						|
use crate::MatchFinder;
 | 
						|
 | 
						|
/// Attempts to build an SSR MatchFinder from a comment at the given file
 | 
						|
/// range. If successful, returns the MatchFinder and a TextRange covering
 | 
						|
/// comment.
 | 
						|
pub fn ssr_from_comment(
 | 
						|
    db: &RootDatabase,
 | 
						|
    frange: FileRange,
 | 
						|
) -> Option<(MatchFinder<'_>, TextRange)> {
 | 
						|
    let comment = {
 | 
						|
        let file = db.parse(frange.file_id);
 | 
						|
        file.tree().syntax().token_at_offset(frange.range.start()).find_map(ast::Comment::cast)
 | 
						|
    }?;
 | 
						|
    let comment_text_without_prefix = comment.text().strip_prefix(comment.prefix()).unwrap();
 | 
						|
    let ssr_rule = comment_text_without_prefix.parse().ok()?;
 | 
						|
 | 
						|
    let lookup_context = FilePosition { file_id: frange.file_id, offset: frange.range.start() };
 | 
						|
 | 
						|
    let mut match_finder = MatchFinder::in_context(db, lookup_context, vec![]).ok()?;
 | 
						|
    match_finder.add_rule(ssr_rule).ok()?;
 | 
						|
 | 
						|
    Some((match_finder, comment.syntax().text_range()))
 | 
						|
}
 |