Skip to content

Code generation gets stuck if .fvmrc contains flutter version that's invalid #2850

@prateekmedia

Description

@prateekmedia

Describe the bug

When .fvmrc contains a flutter version that's not present in the system, it gets stuck indefinitely, no errors no warnings.

Steps to reproduce

  1. .fvmrc
{
  "flutter": "3.32.9"
}

There is no flutter version with 3.32.9 as of writing, you can also try this with a flutter version that's not installed through fvm.

  1. Now when I run this command it gets stuck infinitely without any warning or message, which makes it confusing that what could be the problem.
flutter_rust_bridge_codegen generate 

Logs

[2025-08-24T14:56:01.260Z DEBUG ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flutter_rust_bridge_codegen-2.11.1/src/main.rs:25] cli=Cli { verbose: false, command: Generate(GenerateCommandArgs { watch: false, primary: GenerateCommandArgsPrimary { config_file: None, rust_input: None, dart_output: None, c_output: None, duplicated_c_output: None, rust_root: None, rust_output: None, dart_entrypoint_class_name: None, dart_format_line_length: None, dart_preamble: None, rust_preamble: None, no_dart_enums_style: false, no_add_mod_to_lib: false, llvm_path: None, llvm_compiler_opts: None, dart_root: None, no_build_runner: false, extra_headers: None, no_web: false, no_deps_check: false, default_external_library_loader_web_prefix: None, no_dart3: false, full_dep: false, default_rust_opaque_codec: None, local: false, enable_lifetime: false, type_64bit_int: false, no_default_dart_async: false, no_auto_upgrade_dependency: false, parse_const: false, no_dart_format: false, no_dart_fix: false, no_rust_format: false, stop_on_error: false, dump: None, dump_all: false, rust_features: None } }) }
[2025-08-24T14:56:01.261Z DEBUG ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flutter_rust_bridge_codegen-2.11.1/src/library/codegen/config/config_parser.rs:51] Found config file flutter_rust_bridge.yaml
[2025-08-24T14:56:01.262Z DEBUG ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flutter_rust_bridge_codegen-2.11.1/src/library/codegen/mod.rs:24] config=Config { base_dir: Some(""), rust_input: Some("crate::api"), dart_output: Some("lib/src/rust"), c_output: None, duplicated_c_output: None, rust_root: Some("rust/"), rust_output: None, dart_entrypoint_class_name: None, dart_format_line_length: None, dart_preamble: Some("// ignore_for_file: require_trailing_commas\n"), rust_preamble: None, dart_enums_style: None, add_mod_to_lib: None, llvm_path: None, llvm_compiler_opts: None, dart_root: None, build_runner: None, extra_headers: None, web: Some(false), deps_check: None, dart3: None, full_dep: None, default_rust_opaque_codec: None, local: None, default_external_library_loader_web_prefix: None, dart_type_rename: None, enable_lifetime: None, type_64bit_int: None, default_dart_async: None, auto_upgrade_dependency: None, parse_const: None, dart_format: None, dart_fix: None, rust_format: None, stop_on_error: None, dump: None, dump_all: None, rust_features: None } meta_config=MetaConfig { watch: false }
[2025-08-24T14:56:01.262Z DEBUG ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flutter_rust_bridge_codegen-2.11.1/src/library/codegen/config/internal_config_parser/mod.rs:34] InternalConfig.parse base_dir="~/dev/enteio/ente/mobile/apps/photos"
[2025-08-24T14:56:01.634Z DEBUG ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flutter_rust_bridge_codegen-2.11.1/src/library/codegen/mod.rs:27] internal_config=InternalConfig { controller: ControllerInternalConfig { watch: false, watching_paths: ["~/dev/enteio/ente/mobile/apps/photos/rust/src"], exclude_paths: ["~/dev/enteio/ente/mobile/apps/photos/rust/src/frb_generated.rs"], max_count: None }, preparer: PreparerInternalConfig { dart_root: "~/dev/enteio/ente/mobile/apps/photos", deps_check: true, needs_ffigen: false }, parser: ParserInternalConfig { hir: ParserHirInternalConfig { rust_input_namespace_pack: RustInputNamespacePack { rust_input_namespace_prefixes: [Namespace { joined_path: "crate::api" }], rust_output_path_namespace: Namespace { joined_path: "crate::frb_generated" } }, rust_crate_dir: "~/dev/enteio/ente/mobile/apps/photos/rust", third_party_crate_names: [], rust_features: None, parse_const: false }, mir: ParserMirInternalConfig { rust_input_namespace_pack: RustInputNamespacePack { rust_input_namespace_prefixes: [Namespace { joined_path: "crate::api" }], rust_output_path_namespace: Namespace { joined_path: "crate::frb_generated" } }, force_codec_mode_pack: Some(CodecModePack { dart2rust: Pde, rust2dart: Pde }), default_stream_sink_codec: Sse, default_rust_opaque_codec: Moi, stop_on_error: false, enable_lifetime: false, type_64bit_int: false, default_dart_async: true } }, generator: GeneratorInternalConfig { api_dart: GeneratorApiDartInternalConfig { dart_enums_style: true, dart3: true, dart_decl_base_output_path: "~/dev/enteio/ente/mobile/apps/photos/lib/src/rust", dart_impl_output_path: TargetOrCommonMap { common: "~/dev/enteio/ente/mobile/apps/photos/lib/src/rust/frb_generated.dart", io: "~/dev/enteio/ente/mobile/apps/photos/lib/src/rust/frb_generated.io.dart", web: "~/dev/enteio/ente/mobile/apps/photos/lib/src/rust/frb_generated.web.dart" }, dart_entrypoint_class_name: "RustLib", dart_preamble: "// ignore_for_file: require_trailing_commas\n", dart_type_rename: {} }, wire: GeneratorWireInternalConfig { dart: GeneratorWireDartInternalConfig { has_ffigen: false, web_enabled: false, llvm_path: ["/opt/homebrew/opt/llvm", "/usr/local/opt/llvm", "/usr/lib/llvm-9", "/usr/lib/llvm-10", "/usr/lib/llvm-11", "/usr/lib/llvm-12", "/usr/lib/llvm-13", "/usr/lib/llvm-14", "/usr/lib/", "/usr/lib64/", "C:/Program Files/llvm", "C:/msys64/mingw64"], llvm_compiler_opts: "", dart_root: "~/dev/enteio/ente/mobile/apps/photos", extra_headers: "", dart_impl_output_path: TargetOrCommonMap { common: "~/dev/enteio/ente/mobile/apps/photos/lib/src/rust/frb_generated.dart", io: "~/dev/enteio/ente/mobile/apps/photos/lib/src/rust/frb_generated.io.dart", web: "~/dev/enteio/ente/mobile/apps/photos/lib/src/rust/frb_generated.web.dart" }, dart_output_class_name_pack: DartOutputClassNamePack { entrypoint_class_name: "RustLib", api_class_name: "RustLibApi", api_impl_class_name: "RustLibApiImpl", api_impl_platform_class_name: "RustLibApiImplPlatform", wire_class_name: "RustLibWire", wasm_module_name: "RustLibWasmModule" }, default_external_library_loader: GeneratorWireDartDefaultExternalLibraryLoaderInternalConfig { stem: "rust_lib_photos", io_directory: "rust/target/release/", web_prefix: "pkg/" }, c_symbol_prefix: "frbgen_photos_" }, rust: GeneratorWireRustInternalConfig { rust_crate_dir: "~/dev/enteio/ente/mobile/apps/photos/rust", web_enabled: false, rust_output_path: "~/dev/enteio/ente/mobile/apps/photos/rust/src/frb_generated.rs", c_symbol_prefix: "frbgen_photos_", has_ffigen: false, default_stream_sink_codec: Sse, default_rust_opaque_codec: Moi, rust_preamble: "" }, c: GeneratorWireCInternalConfig { enable: false, rust_crate_dir: "~/dev/enteio/ente/mobile/apps/photos/rust", rust_output_path: "~/dev/enteio/ente/mobile/apps/photos/rust/src/frb_generated.rs", c_output_path: None, c_symbol_prefix: "frbgen_photos_" } } }, polisher: PolisherInternalConfig { duplicated_c_output_path: [], dart_format_line_length: 80, dart_format: true, dart_fix: true, rust_format: true, add_mod_to_lib: true, build_runner: true, web_enabled: false, dart_output: "~/dev/enteio/ente/mobile/apps/photos/lib/src/rust", dart_root: "~/dev/enteio/ente/mobile/apps/photos", rust_crate_dir: "~/dev/enteio/ente/mobile/apps/photos/rust", rust_output_path: "~/dev/enteio/ente/mobile/apps/photos/rust/src/frb_generated.rs", c_output_path: None, enable_auto_upgrade: true }, dumper: DumperInternalConfig { dump_contents: [], dump_directory: "~/dev/enteio/ente/mobile/apps/photos/rust/target/frb_dump" } }
[2025-08-24T14:56:01.635Z DEBUG ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flutter_rust_bridge_codegen-2.11.1/src/library/utils/dart_repository/dart_repo.rs:21] Guessing toolchain the runner is run into
[2025-08-24T14:56:01.635Z DEBUG ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flutter_rust_bridge_codegen-2.11.1/src/library/commands/command_runner.rs:137] execute command: bin=sh args="-c \"fvm\" \"--version\"" current_dir=None cmd="sh" "-c" "\"fvm\" \"--version\""
[2025-08-24T14:56:01.677Z DEBUG ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flutter_rust_bridge_codegen-2.11.1/src/library/commands/command_runner.rs:148] command="sh" "-c" "\"fvm\" \"--version\"" stdout=3.2.1
 stderr=
[2025-08-24T14:56:01.677Z DEBUG ~/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/flutter_rust_bridge_codegen-2.11.1/src/library/commands/command_runner.rs:137] execute command: bin=sh args="-c \"fvm\" \"flutter\" \"--version\"" current_dir=None cmd="sh" "-c" "\"fvm\" \"flutter\" \"--version\""

Expected behavior

It should exit and show me why things are not good for proceed.

Generated binding code

OS

No response

Version of flutter_rust_bridge_codegen

No response

Flutter info

Version of clang++

No response

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    awaitingWaiting for responses, PR, further discussions, upstream release, etcbugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions