Skip to content

Commit aec9974

Browse files
authored
Merge pull request #29 from github/aibaars/dedup
Deduplicate and sort union members
2 parents f514655 + 222af90 commit aec9974

File tree

3 files changed

+76
-74
lines changed

3 files changed

+76
-74
lines changed

generator/src/dbscheme.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::ql;
2+
use std::collections::BTreeSet as Set;
23
use std::fmt;
3-
44
/// Represents a distinct entry in the database schema.
55
pub enum Entry {
66
/// An entry defining a database table.
@@ -21,7 +21,7 @@ pub struct Table {
2121
/// A union in the database schema.
2222
pub struct Union {
2323
pub name: String,
24-
pub members: Vec<String>,
24+
pub members: Set<String>,
2525
}
2626

2727
/// A table in the database schema.

generator/src/main.rs

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ fn make_field_type(
4343
// type to represent them.
4444
let field_union_name = format!("{}_{}_type", parent_name, field_name);
4545
let field_union_name = node_types::escape_name(&field_union_name);
46-
let members: Vec<String> = types
46+
let members: Set<String> = types
4747
.iter()
4848
.map(|t| node_types::escape_name(&child_node_type_name(token_types, t)))
4949
.collect();
@@ -151,9 +151,9 @@ fn convert_nodes(nodes: &Vec<node_types::Entry>) -> Vec<dbscheme::Entry> {
151151
create_containerparent_table(),
152152
create_source_location_prefix_table(),
153153
];
154-
let mut ast_node_members: Vec<String> = Vec::new();
154+
let mut ast_node_members: Set<String> = Set::new();
155155
let mut token_kinds: Map<String, usize> = Map::new();
156-
ast_node_members.push(node_types::escape_name("token"));
156+
ast_node_members.insert(node_types::escape_name("token"));
157157
for node in nodes {
158158
if let node_types::Entry::Token { type_name, kind_id } = node {
159159
if type_name.named {
@@ -170,12 +170,12 @@ fn convert_nodes(nodes: &Vec<node_types::Entry>) -> Vec<dbscheme::Entry> {
170170
} => {
171171
// It's a tree-sitter supertype node, for which we create a union
172172
// type.
173-
let mut members: Vec<String> = Vec::new();
173+
let mut members: Set<String> = Set::new();
174174
for n_member in n_members {
175-
members.push(node_types::escape_name(&child_node_type_name(
175+
members.insert(node_types::escape_name(&child_node_type_name(
176176
&token_kinds,
177177
n_member,
178-
)))
178+
)));
179179
}
180180
entries.push(dbscheme::Entry::Union(dbscheme::Union {
181181
name: node_types::escape_name(&node_types::node_type_name(
@@ -199,7 +199,7 @@ fn convert_nodes(nodes: &Vec<node_types::Entry>) -> Vec<dbscheme::Entry> {
199199
}],
200200
keysets: None,
201201
};
202-
ast_node_members.push(node_types::escape_name(&name));
202+
ast_node_members.insert(node_types::escape_name(&name));
203203

204204
// If the type also has fields or children, then we create either
205205
// auxiliary tables or columns in the defining table for them.
@@ -328,7 +328,7 @@ fn write_dbscheme(language: &Language, entries: &[dbscheme::Entry]) -> std::io::
328328
fn create_location_union() -> dbscheme::Entry {
329329
dbscheme::Entry::Union(dbscheme::Union {
330330
name: "location".to_owned(),
331-
members: vec!["location_default".to_owned()],
331+
members: vec!["location_default".to_owned()].into_iter().collect(),
332332
})
333333
}
334334

@@ -459,7 +459,7 @@ fn create_locations_default_table() -> dbscheme::Entry {
459459
fn create_sourceline_union() -> dbscheme::Entry {
460460
dbscheme::Entry::Union(dbscheme::Union {
461461
name: "sourceline".to_owned(),
462-
members: vec!["file".to_owned()],
462+
members: vec!["file".to_owned()].into_iter().collect(),
463463
})
464464
}
465465

@@ -503,7 +503,9 @@ fn create_numlines_table() -> dbscheme::Entry {
503503
fn create_container_union() -> dbscheme::Entry {
504504
dbscheme::Entry::Union(dbscheme::Union {
505505
name: "container".to_owned(),
506-
members: vec!["folder".to_owned(), "file".to_owned()],
506+
members: vec!["folder".to_owned(), "file".to_owned()]
507+
.into_iter()
508+
.collect(),
507509
})
508510
}
509511

0 commit comments

Comments
 (0)