Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions prqlc/prql-compiler/tests/integration/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1328,10 +1328,12 @@ fn test_func_call() {
"###);

// A non-friendly option for #154
let ast = parse_expr(r#"count s'*'"#).unwrap();
let func_call: FuncCall = ast.kind.into_func_call().unwrap();
assert_yaml_snapshot!(
func_call, @r###"
parse_expr(r#"count s'*'"#)
.unwrap()
.kind
.into_func_call()
.unwrap(), @r###"
---
name:
Ident:
Expand Down
6 changes: 5 additions & 1 deletion prqlc/prqlc-parser/src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use std::collections::HashMap;

use chumsky::prelude::*;

use itertools::Itertools;
use prqlc_ast::expr::*;
use prqlc_ast::Span;

Expand Down Expand Up @@ -85,12 +86,15 @@ pub fn expr() -> impl Parser<Token, Expr, Error = PError> + Clone {
|_| Expr::new(ExprKind::Literal(Literal::Null)),
));

// TODO: temporary implementation to keep it working on the new
// interpolation lexer with the old interpolation parser
let interpolation = select! {
Token::Interpolation('s', string) => (ExprKind::SString as fn(_) -> _, string),
Token::Interpolation('f', string) => (ExprKind::FString as fn(_) -> _, string),
}
.validate(|(finish, string), span: ParserSpan, emit| {
match interpolation::parse(string, span + 2) {
match interpolation::parse(string.into_iter().map(|x| x.to_string()).join(""), span + 2)
{
Ok(items) => finish(items),
Err(errors) => {
for err in errors {
Expand Down
4 changes: 3 additions & 1 deletion prqlc/prqlc-parser/src/interpolation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@ use super::common::{into_expr, PError};
use super::lexer::*;
use super::span::ParserSpan;

use prqlc_ast::expr::InterpolateItem;

/// Parses interpolated strings
pub fn parse(string: String, span_base: ParserSpan) -> Result<Vec<InterpolateItem>, Vec<PError>> {
let res = parser(span_base).parse(string);
let res = parser(span_base).parse(dbg!(string));

match res {
Ok(items) => Ok(items),
Expand Down
Loading