Skip to content

Commit 40eb40c

Browse files
author
Nico Sammito
authored
Merge pull request #262 from code0-tech/256-update-definitions
Update Definitions to Include Signature
2 parents e41f029 + df9bcb9 commit 40eb40c

148 files changed

Lines changed: 6884 additions & 8806 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ edition = "2024"
88
[workspace.dependencies]
99
serde = "1.0.219"
1010
serde_json = "1.0.140"
11-
tucana = "0.0.54"
11+
tucana = "0.0.56"
1212
clap = "4.5.41"
1313
colored = "3.0"
1414
tabled = "0.20"

crates/cli/src/analyser/core.rs

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,19 +57,6 @@ impl Analyser {
5757
self.index.has_data_type(identifier, except_id)
5858
}
5959

60-
pub fn generic_key_in_target(&self, key: &str, target: &str) -> bool {
61-
let norm_target = target.to_ascii_lowercase();
62-
self.data_types.iter().any(|dt| {
63-
dt.definition_data_type
64-
.identifier
65-
.eq_ignore_ascii_case(&norm_target)
66-
&& dt
67-
.definition_data_type
68-
.generic_keys
69-
.contains(&key.to_string())
70-
})
71-
}
72-
7360
pub fn null_field(&mut self, name: String, adt: &AnalysableDataType) {
7461
self.reporter.add(Diagnose::new(
7562
adt.definition_data_type.identifier.clone(),
Lines changed: 21 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
use crate::analyser::core::{AnalysableDataType, Analyser};
22
use crate::diagnostics::diagnose::Diagnose;
33
use crate::diagnostics::kinds::DiagnosticKind;
4-
use tucana::shared::DataTypeIdentifier;
5-
use tucana::shared::data_type_identifier::Type;
64
use tucana::shared::definition_data_type_rule::Config;
75

86
impl Analyser {
@@ -17,13 +15,16 @@ impl Analyser {
1715
},
1816
));
1917
}
20-
21-
if dt.variant == 0 {
22-
self.reporter.add(Diagnose::new(
23-
dt.identifier.clone(),
24-
adt.original_definition.clone(),
25-
DiagnosticKind::ForbiddenVariant,
26-
));
18+
for linked in dt.linked_data_type_identifiers.clone() {
19+
if !self.data_type_identifier_exists(linked.as_str(), None) {
20+
self.reporter.add(Diagnose::new(
21+
dt.identifier.clone(),
22+
adt.original_definition.clone(),
23+
DiagnosticKind::UndefinedDataTypeIdentifier {
24+
identifier: linked.clone(),
25+
},
26+
));
27+
}
2728
}
2829

2930
if dt.alias.is_empty() {
@@ -45,89 +46,27 @@ impl Analyser {
4546
},
4647
));
4748
}
48-
let mut detected: Vec<String> = vec![];
49+
50+
if dt.signature == "" {
51+
self.reporter.add(Diagnose::new(
52+
dt.identifier.clone(),
53+
adt.original_definition.clone(),
54+
DiagnosticKind::NullField {
55+
field_name: "signature".into(),
56+
},
57+
));
58+
}
59+
4960
for optional_rule in &dt.rules {
5061
if let Some(config) = &optional_rule.config {
5162
match config {
52-
Config::ContainsKey(rule) => {
53-
if let Some(dti) = &rule.data_type_identifier {
54-
self.walk_data_type_identifier(adt, dti, &mut detected);
55-
} else {
56-
self.null_field("definition_data_type_contains_key_rule".into(), adt);
57-
}
58-
}
59-
Config::ContainsType(rule) => {
60-
if let Some(dti) = &rule.data_type_identifier {
61-
self.walk_data_type_identifier(adt, dti, &mut detected);
62-
} else {
63-
self.null_field("definition_data_type_contains_type_rule".into(), adt);
64-
}
65-
}
66-
Config::ItemOfCollection(rule) => {
67-
if rule.items.is_empty() {
68-
self.null_field(
69-
"definition_data_type_item_of_collection_rule".into(),
70-
adt,
71-
);
72-
}
73-
}
7463
Config::NumberRange(_) | Config::Regex(_) => {}
75-
Config::InputTypes(rule) => {
76-
if rule.input_types.is_empty() {
77-
self.null_field("definition_data_type_input_types_rule".into(), adt);
78-
}
79-
for input in &rule.input_types {
80-
if let Some(dti) = &input.data_type_identifier {
81-
self.walk_data_type_identifier(adt, dti, &mut detected);
82-
} else {
83-
self.reporter.add(Diagnose::new(
84-
dt.identifier.clone(),
85-
adt.original_definition.clone(),
86-
DiagnosticKind::UndefinedDataTypeIdentifier {
87-
identifier: dt.identifier.clone(),
88-
},
89-
));
90-
}
91-
}
92-
}
93-
Config::ReturnType(rule) => {
94-
if let Some(dti) = &rule.data_type_identifier {
95-
self.walk_data_type_identifier(adt, dti, &mut detected);
96-
} else {
97-
self.null_field("definition_data_type_return_type_rule".into(), adt);
98-
}
99-
}
100-
Config::ParentType(rule) => {
101-
if let Some(dti) = &rule.parent_type {
102-
self.walk_data_type_identifier(adt, dti, &mut detected);
103-
} else {
104-
self.null_field("definition_data_type_parent_type_rule".into(), adt);
105-
}
106-
}
10764
}
10865
} else {
10966
self.null_field("rule".into(), adt);
11067
}
11168
}
11269

113-
for key in dt.generic_keys.iter().filter(|k| !detected.contains(k)) {
114-
self.reporter.add(Diagnose::new(
115-
dt.identifier.clone(),
116-
adt.original_definition.clone(),
117-
DiagnosticKind::UnusedGenericKey { key: key.clone() },
118-
));
119-
}
120-
for key in detected
121-
.into_iter()
122-
.filter(|k| !dt.generic_keys.contains(k))
123-
{
124-
self.reporter.add(Diagnose::new(
125-
dt.identifier.clone(),
126-
adt.original_definition.clone(),
127-
DiagnosticKind::UndefinedGenericKey { key },
128-
));
129-
}
130-
13170
if dt.name.is_empty() {
13271
self.reporter.add(Diagnose::new(
13372
dt.identifier.clone(),
@@ -138,62 +77,4 @@ impl Analyser {
13877
));
13978
}
14079
}
141-
142-
fn walk_data_type_identifier(
143-
&mut self,
144-
adt: &AnalysableDataType,
145-
dti: &DataTypeIdentifier,
146-
acc: &mut Vec<String>,
147-
) {
148-
if let Some(t) = &dti.r#type {
149-
match t {
150-
Type::DataTypeIdentifier(identifier) => {
151-
if !self.data_type_identifier_exists(identifier, Some(adt.id)) {
152-
self.reporter.add(Diagnose::new(
153-
adt.definition_data_type.identifier.clone(),
154-
adt.original_definition.clone(),
155-
DiagnosticKind::UndefinedDataTypeIdentifier {
156-
identifier: identifier.clone(),
157-
},
158-
));
159-
}
160-
}
161-
Type::GenericType(generic) => {
162-
if !self
163-
.data_type_identifier_exists(&generic.data_type_identifier, Some(adt.id))
164-
{
165-
self.reporter.add(Diagnose::new(
166-
adt.definition_data_type.identifier.clone(),
167-
adt.original_definition.clone(),
168-
DiagnosticKind::UndefinedDataTypeIdentifier {
169-
identifier: generic.data_type_identifier.clone(),
170-
},
171-
));
172-
}
173-
if generic.generic_mappers.is_empty() {
174-
self.reporter.add(Diagnose::new(
175-
adt.definition_data_type.identifier.clone(),
176-
adt.original_definition.clone(),
177-
DiagnosticKind::EmptyGenericMapper,
178-
));
179-
}
180-
for mapper in &generic.generic_mappers {
181-
if adt
182-
.definition_data_type
183-
.generic_keys
184-
.contains(&mapper.target)
185-
{
186-
acc.push(mapper.target.clone());
187-
}
188-
for source in &mapper.source {
189-
self.walk_data_type_identifier(adt, source, acc);
190-
}
191-
}
192-
}
193-
Type::GenericKey(key) => acc.push(key.clone()),
194-
}
195-
} else {
196-
self.null_field("data_type".into(), adt);
197-
}
198-
}
19980
}

crates/cli/src/analyser/flow_type.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,24 +66,25 @@ impl Analyser {
6666
}
6767

6868
if let Some(identifier) = &flow.input_type_identifier
69-
&& !self.data_type_identifier_exists(identifier, None)
69+
&& identifier == ""
7070
{
7171
self.reporter.add(Diagnose::new(
7272
name.clone(),
7373
original.clone(),
74-
DiagnosticKind::UndefinedDataTypeIdentifier {
75-
identifier: identifier.clone(),
74+
DiagnosticKind::NullField {
75+
field_name: "input_type_identifier".into(),
7676
},
7777
));
7878
}
79+
7980
if let Some(identifier) = &flow.return_type_identifier
80-
&& !self.data_type_identifier_exists(identifier, None)
81+
&& identifier == ""
8182
{
8283
self.reporter.add(Diagnose::new(
8384
name.clone(),
8485
original.clone(),
85-
DiagnosticKind::UndefinedDataTypeIdentifier {
86-
identifier: identifier.clone(),
86+
DiagnosticKind::NullField {
87+
field_name: "return_type_identifier".into(),
8788
},
8889
));
8990
}

0 commit comments

Comments
 (0)