Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fe868e4

Browse files
committed
Ruby-Generator: add --dbscheme and --library flags
1 parent fc8f591 commit fe868e4

9 files changed

Lines changed: 41 additions & 21 deletions

File tree

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
run: cargo build --release
4848
- name: Generate dbscheme
4949
if: ${{ matrix.os == 'ubuntu-latest' }}
50-
run: target/release/ruby-generator
50+
run: target/release/ruby-generator --dbscheme ql/src/ruby.dbscheme --library ql/src/codeql_ruby/ast/internal/TreeSitter.qll
5151
- uses: actions/upload-artifact@v2
5252
if: ${{ matrix.os == 'ubuntu-latest' }}
5353
with:

Cargo.lock

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

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ The generated `ql/src/ruby.dbscheme` and `ql/src/codeql_ruby/ast/internal/TreeSi
1616

1717
```bash
1818
# Run the generator
19-
cargo run --release -p ruby-generator
19+
cargo run --release -p ruby-generator -- --dbscheme ql/src/ruby.dbscheme --library ql/src/codeql_ruby/ast/internal/TreeSitter.qll
2020
# Then auto-format the QL library
2121
codeql query format -i ql/src/codeql_ruby/ast/internal/TreeSitter.qll
2222
```

create-extractor-pack.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
cargo build --release
22

3-
cargo run --release -p ruby-generator
3+
cargo run --release -p ruby-generator -- --dbscheme ql/src/ruby.dbscheme --library ql/src/codeql_ruby/ast/internal/TreeSitter.qll
44
codeql query format -i ql\src\codeql_ruby\ast\internal\TreeSitter.qll
55

66
rm -Recurse -Force extractor-pack

create-extractor-pack.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ fi
1212

1313
cargo build --release
1414

15-
cargo run --release -p ruby-generator
15+
cargo run --release -p ruby-generator -- --dbscheme ql/src/ruby.dbscheme --library ql/src/codeql_ruby/ast/internal/TreeSitter.qll
1616
codeql query format -i ql/src/codeql_ruby/ast/internal/TreeSitter.qll
1717

1818
rm -rf extractor-pack

generator/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ edition = "2018"
77
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
88

99
[dependencies]
10+
clap = "2.33"
1011
node-types = { path = "../node-types" }
1112
tracing = "0.1"
1213
tracing-subscriber = { version = "0.2", features = ["env-filter"] }

generator/src/language.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
use std::path::PathBuf;
2-
31
pub struct Language {
42
pub name: String,
53
pub node_types: &'static str,
6-
pub dbscheme_path: PathBuf,
7-
pub ql_library_path: PathBuf,
84
}

generator/src/main.rs

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ mod language;
33
mod ql;
44
mod ql_gen;
55

6+
use clap;
67
use language::Language;
78
use std::collections::BTreeMap as Map;
89
use std::collections::BTreeSet as Set;
@@ -369,16 +370,20 @@ fn create_tokeninfo<'a>(
369370
(case, table)
370371
}
371372

372-
fn write_dbscheme(language: &Language, entries: &[dbscheme::Entry]) -> std::io::Result<()> {
373+
fn write_dbscheme(
374+
dbscheme_path: PathBuf,
375+
language: &Language,
376+
entries: &[dbscheme::Entry],
377+
) -> std::io::Result<()> {
373378
info!(
374379
"Writing database schema for {} to '{}'",
375380
&language.name,
376-
match language.dbscheme_path.to_str() {
381+
match dbscheme_path.to_str() {
377382
None => "<undisplayable>",
378383
Some(p) => p,
379384
}
380385
);
381-
let file = File::create(&language.dbscheme_path)?;
386+
let file = File::create(dbscheme_path)?;
382387
let mut file = LineWriter::new(file);
383388
dbscheme::write(&language.name, &mut file, &entries)
384389
}
@@ -665,21 +670,32 @@ fn create_diagnostics<'a>() -> (dbscheme::Case<'a>, dbscheme::Table<'a>) {
665670
(case, table)
666671
}
667672

668-
fn main() {
673+
fn main() -> std::io::Result<()> {
669674
tracing_subscriber::fmt()
670675
.with_target(false)
671676
.without_time()
672677
.with_level(true)
673678
.with_env_filter(tracing_subscriber::EnvFilter::from_default_env())
674679
.init();
675680

676-
// TODO: figure out proper dbscheme output path and/or take it from the
677-
// command line.
681+
let matches = clap::App::new("Ruby dbscheme generator")
682+
.version("1.0")
683+
.author("GitHub")
684+
.about("CodeQL Ruby dbscheme generator")
685+
.args_from_usage(
686+
"--dbscheme=<FILE> 'Path of the generated dbscheme file'
687+
--library=<FILE> 'Path of the generated QLL file'",
688+
)
689+
.get_matches();
690+
let dbscheme_path = matches.value_of("dbscheme").expect("missing --dbscheme");
691+
let dbscheme_path = PathBuf::from(dbscheme_path);
692+
693+
let ql_library_path = matches.value_of("library").expect("missing --library");
694+
let ql_library_path = PathBuf::from(ql_library_path);
695+
678696
let ruby = Language {
679697
name: "Ruby".to_owned(),
680698
node_types: tree_sitter_ruby::NODE_TYPES,
681-
dbscheme_path: PathBuf::from("ql/src/ruby.dbscheme"),
682-
ql_library_path: PathBuf::from("ql/src/codeql_ruby/ast/internal/TreeSitter.qll"),
683699
};
684700
match node_types::read_node_types_str(&ruby.node_types) {
685701
Err(e) => {
@@ -689,17 +705,18 @@ fn main() {
689705
Ok(nodes) => {
690706
let dbscheme_entries = convert_nodes(&nodes);
691707

692-
if let Err(e) = write_dbscheme(&ruby, &dbscheme_entries) {
708+
if let Err(e) = write_dbscheme(dbscheme_path, &ruby, &dbscheme_entries) {
693709
error!("Failed to write dbscheme: {}", e);
694710
std::process::exit(2);
695711
}
696712

697713
let classes = ql_gen::convert_nodes(&nodes);
698714

699-
if let Err(e) = ql_gen::write(&ruby, &classes) {
715+
if let Err(e) = ql_gen::write(ql_library_path, &ruby, &classes) {
700716
println!("Failed to write QL library: {}", e);
701717
std::process::exit(3);
702718
}
719+
Ok(())
703720
}
704721
}
705722
}

generator/src/ql_gen.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,28 @@ use crate::ql;
33
use std::collections::BTreeSet;
44
use std::fs::File;
55
use std::io::LineWriter;
6+
use std::path::PathBuf;
67

78
/// Writes the QL AST library for the given library.
89
///
910
/// # Arguments
1011
///
1112
/// `language` - the language for which we're generating a library
1213
/// `classes` - the list of classes to write.
13-
pub fn write(language: &Language, classes: &[ql::TopLevel]) -> std::io::Result<()> {
14+
pub fn write(
15+
ql_library_path: PathBuf,
16+
language: &Language,
17+
classes: &[ql::TopLevel]
18+
) -> std::io::Result<()> {
1419
println!(
1520
"Writing QL library for {} to '{}'",
1621
&language.name,
17-
match language.ql_library_path.to_str() {
22+
match ql_library_path.to_str() {
1823
None => "<undisplayable>",
1924
Some(p) => p,
2025
}
2126
);
22-
let file = File::create(&language.ql_library_path)?;
27+
let file = File::create(ql_library_path)?;
2328
let mut file = LineWriter::new(file);
2429
ql::write(&language.name, &mut file, &classes)
2530
}

0 commit comments

Comments
 (0)