-
Notifications
You must be signed in to change notification settings - Fork 222
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PRQL code generation & formatting #1420
Comments
@Rishav1707 this is the followup on #1418 |
FYI — in #2016 we test that the examples, after being formatted with the existing formatter, can still compile. Where they can't, the language in the markdown in the book is |
FYI I deleted a couple of messages to keep the issue clean, I confused things. @aljazerzen I think for a Good "Actually First" Issue, I think this needs an initial effort for the framework. I feel like it's at my level at the moment, but not trivially so, and so for a completely new person it might be quite confusing.
|
I did the framework on codegen branch, as noted in the description. It may need to be rebased to latest main branch. I didn't t merge it because we'd have to maintain it along with existing codegen impl. |
(Thanks a lot. I added some thoughts to the broader point in #1840. Hope this isn't interpreted as criticism, am still trying to work out why we haven't been so successful here) |
For debugging purposes and for the
prqlc fmt
command, we have implemented a basic PRQL code generation from PL AST. It is done viaimpl std::fmt::Display for X
, which is convenient, but lacks a few key features:Instead, I suggest we follow implementation of rustfmt. I've started work on codegen branch.
Start by implementing
WriteSource
forpl::StmtKind
.You should be able to reuse majority of
impl Display for StmtKind
and adapt it to use string concatenation, similar to existing code insrc/codegen.rs
. Whit this I mean to change things like this:... into:
When you use
write!(f, "{some_var}")
orformat!("{some_var}")
, Rust will callstd::fmt::Display
onsome_var
. We used this to do formatting and this issue is about migrating away from that to our own traitWriteSource
. So when reusing the code from current impl, it's fine to use write! and format! for now, but the goal is to replace this with calls toWriteSource::write()
.To test it, uncomment
r += &stmt.kind.write(opt.clone()).unwrap();
incodegen.rs
andcargo run fmt a_test_file.prql
should be working.Here are a few test files:
The contents of pipelines are obviously not yet implemented and should output
<todo>
or something.This is the gist of it. Similarly, we have adapt basically all
Display
impls inast::pl
toWriteSource
. I suggest starting withExprKind
, which is already partially done and can easily be tested.Because this is quite a lot of work, we can merge smaller commits implementing any small chunk of the codegen.
This issue is a prerequisite for #130.
The text was updated successfully, but these errors were encountered: