Skip to content

Commit

Permalink
allow comments in datasources and generators
Browse files Browse the repository at this point in the history
  • Loading branch information
mavilein committed Mar 24, 2020
1 parent 89d2f3b commit 8cec25a
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 11 deletions.
4 changes: 2 additions & 2 deletions libs/datamodel/core/src/ast/parser/datamodel.pest
Original file line number Diff line number Diff line change
Expand Up @@ -116,12 +116,12 @@ enum_declaration = { doc_comment* ~ ENUM_KEYWORD ~ identifier ~ BLOCK_OPEN ~ (en
// Source block
// ######################################
key_value = { identifier ~ "=" ~ expression ~ NEWLINE }
source_block = { doc_comment* ~ DATASOURCE_KEYWORD ~ identifier ~ BLOCK_OPEN ~ key_value* ~ BLOCK_CLOSE }
source_block = { doc_comment* ~ DATASOURCE_KEYWORD ~ identifier ~ BLOCK_OPEN ~ (key_value | doc_comment)* ~ BLOCK_CLOSE }

// ######################################
// Generator block
// ######################################
generator_block = { doc_comment* ~ GENERATOR_KEYWORD ~ identifier ~ BLOCK_OPEN ~ key_value* ~ BLOCK_CLOSE }
generator_block = { doc_comment* ~ GENERATOR_KEYWORD ~ identifier ~ BLOCK_OPEN ~ (key_value | doc_comment)* ~ BLOCK_CLOSE }

// ######################################
// Datamodel
Expand Down
44 changes: 35 additions & 9 deletions libs/datamodel/core/tests/base/comments.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,7 @@ fn parse_comments_without_crasing_or_loosing_info() {
let schema = parse(dml);
let user_model = schema.assert_has_model("User");
user_model.assert_is_embedded(false);
user_model
.assert_has_field("id")
.assert_base_type(&ScalarType::Int);
user_model.assert_has_field("id").assert_base_type(&ScalarType::Int);
user_model
.assert_has_field("firstName")
.assert_base_type(&ScalarType::String);
Expand All @@ -43,9 +41,7 @@ fn accept_a_comment_at_the_end() {
let schema = parse(dml);
let user_model = schema.assert_has_model("User");
user_model.assert_is_embedded(false);
user_model
.assert_has_field("id")
.assert_base_type(&ScalarType::Int);
user_model.assert_has_field("id").assert_base_type(&ScalarType::Int);
}

#[test]
Expand All @@ -59,9 +55,7 @@ fn accept_a_doc_comment_at_the_end() {
let schema = parse(dml);
let user_model = schema.assert_has_model("User");
user_model.assert_is_embedded(false);
user_model
.assert_has_field("id")
.assert_base_type(&ScalarType::Int);
user_model.assert_has_field("id").assert_base_type(&ScalarType::Int);
}

#[test]
Expand All @@ -78,3 +72,35 @@ fn comments_must_work_in_enums() {
// must not crash
let _ = parse(dml);
}

#[test]
fn comments_in_a_generator_must_work() {
let dml = r#"
generator gen {
provider = "predefined-generator"
platforms = ["darwin"]
// platforms is deprecated
}
"#;

// must not crash
let _ = parse(dml);
}

#[test]
fn comments_in_a_datasource_must_work() {
let dml = r#"
datasource db {
provider = "postgresql"
// Like, postgresql://user:password@localhost:5432/database/schema
url = env("PARCEL_PG_URL")
}
"#;
std::env::set_var(
"PARCEL_PG_URL",
"postgresql://user:password@localhost:5432/database/schema",
);

// must not crash
let _ = parse(dml);
}

0 comments on commit 8cec25a

Please sign in to comment.