slint/tools/compiler/main.rs
Olivier Goffart 03534039d6 Replace more .60 by .slint
Mainly an automated change with
    git grep -O"sed -i 's/\.60/.slint/g'" -w "\.60"

and some manual checks
2022-02-02 10:12:31 +01:00

78 lines
2.7 KiB
Rust

// Copyright © SixtyFPS GmbH <info@sixtyfps.io>
// SPDX-License-Identifier: (GPL-3.0-only OR LicenseRef-SixtyFPS-commercial)
use clap::Parser;
use slint_compiler_internal::diagnostics::BuildDiagnostics;
use slint_compiler_internal::*;
use std::io::Write;
#[derive(Parser)]
struct Cli {
/// Set output format
#[clap(short = 'f', long = "format", default_value = "cpp")]
format: generator::OutputFormat,
/// Include path for other .slint files
#[clap(short = 'I', name = "include path", number_of_values = 1, parse(from_os_str))]
include_paths: Vec<std::path::PathBuf>,
/// Path to .slint file ('-' for stdin)
#[clap(name = "file", parse(from_os_str))]
path: std::path::PathBuf,
/// The style name ('native', 'fluent', or 'ugly')
#[clap(long, name = "style name")]
style: Option<String>,
/// Generate a dependency file
#[clap(name = "dependency file", long = "depfile", number_of_values = 1, parse(from_os_str))]
depfile: Option<std::path::PathBuf>,
/// Sets the output file ('-' for stdout)
#[clap(name = "file to generate", short = 'o', default_value = "-", parse(from_os_str))]
output: std::path::PathBuf,
}
fn main() -> std::io::Result<()> {
proc_macro2::fallback::force(); // avoid a abort if panic=abort is set
let args = Cli::parse();
let mut diag = BuildDiagnostics::default();
let syntax_node = parser::parse_file(&args.path, &mut diag);
//println!("{:#?}", syntax_node);
if diag.has_error() {
diag.print();
std::process::exit(-1);
}
let mut compiler_config = CompilerConfiguration::new(args.format);
compiler_config.include_paths = args.include_paths;
if let Some(style) = args.style {
compiler_config.style = Some(style);
}
let syntax_node = syntax_node.expect("diags contained no compilation errors");
let (doc, diag) = spin_on::spin_on(compile_syntax_node(syntax_node, diag, compiler_config));
let diag = diag.check_and_exit_on_error();
if args.output == std::path::Path::new("-") {
generator::generate(args.format, &mut std::io::stdout(), &doc)?;
} else {
generator::generate(args.format, &mut std::fs::File::create(&args.output)?, &doc)?;
}
if let Some(depfile) = args.depfile {
let mut f = std::fs::File::create(depfile)?;
write!(f, "{}:", args.output.display())?;
for x in &diag.all_loaded_files {
if x.is_absolute() {
write!(f, " {}", x.display())?;
}
}
for resource in doc.root_component.embedded_file_resources.borrow().keys() {
write!(f, " {}", resource)?;
}
writeln!(f)?;
}
diag.print_warnings_and_exit_on_error();
Ok(())
}