Syntax updater: remove the conditional flags and always update to the new syntax

This commit is contained in:
Olivier Goffart 2022-10-24 16:53:28 +02:00 committed by Olivier Goffart
parent c16253d29f
commit 2e4d42d356
5 changed files with 43 additions and 51 deletions

View file

@ -0,0 +1,12 @@
# Slint syntax updater
Use this tool to update Slint files from the current Syntax to the new experimental syntax, using the new
component declaration and following the new rules tracked in [issue #1750](https://github.com/slint-ui/slint/issues/1750)
### Usage:
```
export SLINT_EXPERIMENTAL_SYNTAX=true
cargo run -p syntax_updater -- -i /path/to/my/app/ui/**/*.slint
```

View file

@ -9,9 +9,8 @@ pub(crate) fn fold_node(
node: &SyntaxNode, node: &SyntaxNode,
file: &mut impl Write, file: &mut impl Write,
_state: &mut crate::State, _state: &mut crate::State,
args: &Cli, _args: &Cli,
) -> std::io::Result<bool> { ) -> std::io::Result<bool> {
debug_assert!(args.input_output_properties);
if node.kind() == SyntaxKind::PropertyDeclaration if node.kind() == SyntaxKind::PropertyDeclaration
&& node && node
.parent() .parent()

View file

@ -202,7 +202,7 @@ fn move_properties_to_root(
file: &mut impl Write, file: &mut impl Write,
args: &Cli, args: &Cli,
) -> std::io::Result<bool> { ) -> std::io::Result<bool> {
if state.lookup_change.property_mappings.is_empty() && !args.new_component_declaration { if state.lookup_change.property_mappings.is_empty() {
return Ok(false); return Ok(false);
} }
let mut seen_brace = false; let mut seen_brace = false;

View file

@ -11,7 +11,6 @@ pub(crate) fn fold_node(
state: &mut crate::State, state: &mut crate::State,
args: &Cli, args: &Cli,
) -> std::io::Result<bool> { ) -> std::io::Result<bool> {
debug_assert!(args.new_component_declaration);
let kind = node.kind(); let kind = node.kind();
if kind == SyntaxKind::Component && node.child_token(SyntaxKind::ColonEqual).is_some() { if kind == SyntaxKind::Component && node.child_token(SyntaxKind::ColonEqual).is_some() {
let is_global = let is_global =

View file

@ -42,21 +42,9 @@ pub struct Cli {
#[clap(short, long, action)] #[clap(short, long, action)]
inline: bool, inline: bool,
/// Do the lookup changes from issue #273 /// Move all properties declaration to root
#[clap(long, action)]
fully_qualify: bool,
/// Move all properties declaration to root (implies fully_qualify)
#[clap(long, action)] #[clap(long, action)]
move_declaration: bool, move_declaration: bool,
/// Mark top level property as `inout` #191
#[clap(long, action)]
input_output_properties: bool,
/// New component declaration #1682 (implies fully_qualify)
#[clap(long, action)]
new_component_declaration: bool,
} }
fn main() -> std::io::Result<()> { fn main() -> std::io::Result<()> {
@ -174,31 +162,31 @@ fn process_file(
let syntax_node = i_slint_compiler::parser::parse(source.clone(), Some(path), &mut diag); let syntax_node = i_slint_compiler::parser::parse(source.clone(), Some(path), &mut diag);
let len = syntax_node.node.text_range().end().into(); let len = syntax_node.node.text_range().end().into();
let mut state = State::default(); let mut state = State::default();
if args.fully_qualify || args.move_declaration {
let doc = syntax_node.clone().into(); let doc = syntax_node.clone().into();
let mut type_loader = TypeLoader::new( let mut type_loader = TypeLoader::new(
i_slint_compiler::typeregister::TypeRegister::builtin(), i_slint_compiler::typeregister::TypeRegister::builtin(),
i_slint_compiler::CompilerConfiguration::new( i_slint_compiler::CompilerConfiguration::new(
i_slint_compiler::generator::OutputFormat::Llr, i_slint_compiler::generator::OutputFormat::Llr,
), ),
&mut BuildDiagnostics::default(), &mut BuildDiagnostics::default(),
); );
let dependency_registry = Rc::new(RefCell::new( let dependency_registry = Rc::new(RefCell::new(
i_slint_compiler::typeregister::TypeRegister::new(&type_loader.global_type_registry), i_slint_compiler::typeregister::TypeRegister::new(&type_loader.global_type_registry),
)); ));
let foreign_imports = spin_on::spin_on(type_loader.load_dependencies_recursively( let foreign_imports = spin_on::spin_on(type_loader.load_dependencies_recursively(
&doc, &doc,
&mut diag, &mut diag,
&dependency_registry, &dependency_registry,
)); ));
let current_doc = crate::object_tree::Document::from_node( let current_doc = crate::object_tree::Document::from_node(
doc, doc,
foreign_imports, foreign_imports,
&mut diag, &mut diag,
&dependency_registry, &dependency_registry,
); );
state.current_doc = Rc::new(current_doc).into() state.current_doc = Rc::new(current_doc).into();
}
visit_node(syntax_node, &mut file, &mut state, args)?; visit_node(syntax_node, &mut file, &mut state, args)?;
if diag.has_error() { if diag.has_error() {
file.write_all(&source.as_bytes()[len..])?; file.write_all(&source.as_bytes()[len..])?;
@ -301,19 +289,13 @@ fn fold_node(
state: &mut State, state: &mut State,
args: &Cli, args: &Cli,
) -> std::io::Result<bool> { ) -> std::io::Result<bool> {
if args.input_output_properties if experiments::input_output_properties::fold_node(node, file, state, args)? {
&& experiments::input_output_properties::fold_node(node, file, state, args)?
{
return Ok(true); return Ok(true);
} }
if args.new_component_declaration if experiments::new_component_declaration::fold_node(node, file, state, args)? {
&& experiments::new_component_declaration::fold_node(node, file, state, args)?
{
return Ok(true); return Ok(true);
} }
if (args.fully_qualify || args.move_declaration) if experiments::lookup_changes::fold_node(node, file, state, args)? {
&& experiments::lookup_changes::fold_node(node, file, state, args)?
{
return Ok(true); return Ok(true);
} }
Ok(false) Ok(false)