pub struct Comments(/* private fields */);Expand description
An opaque container for comments from a parse SQL source code.
Source
Finds comments starting within the given location range. The order of iterator reflects the order of the comments as encountered in the parsed source code.
§Example
use sqlparser::{dialect::GenericDialect, parser::Parser, tokenizer::Location};
let sql = r#"/*
header comment ...
... spanning multiple lines
*/
-- first statement
SELECT 'hello' /* world */ FROM DUAL;
-- second statement
SELECT 123 FROM DUAL;
-- trailing comment
"#;
let (ast, comments) = Parser::parse_sql_with_comments(&GenericDialect, sql).unwrap();
// all comments appearing before line seven, i.e. before the first statement itself
assert_eq!(
&comments.find(..Location::new(7, 1)).map(|c| c.as_str()).collect::<Vec<_>>(),
&["\n header comment ...\n ... spanning multiple lines\n", " first statement\n"]);
// all comments appearing within the first statement
assert_eq!(
&comments.find(Location::new(7, 1)..Location::new(8,1)).map(|c| c.as_str()).collect::<Vec<_>>(),
&[" world "]);
// all comments appearing within or after the first statement
assert_eq!(
&comments.find(Location::new(7, 1)..).map(|c| c.as_str()).collect::<Vec<_>>(),
&[" world ", " second statement\n", " trailing comment\n"]);The Spanned trait allows you to access location information for certain AST nodes.