- 
                Notifications
    You must be signed in to change notification settings 
- Fork 471
Rewatch cli refactor #7551
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
          
     Merged
      
      
    
  
     Merged
                    Rewatch cli refactor #7551
Changes from 13 commits
      Commits
    
    
            Show all changes
          
          
            23 commits
          
        
        Select commit
          Hold shift + click to select a range
      
      61a4b50
              
                chore: force LF on windows
              
              
                Bushuo 475f49d
              
                feat: upstream changes of rescript-lang/rewatch#162
              
              
                Bushuo 110ba77
              
                test: update cli arg ordering
              
              
                Bushuo 9859117
              
                fix: look for rescript.exe not rescript-legacy
              
              
                Bushuo 46c8454
              
                test: add legacy test repo
              
              
                Bushuo b4a1dbb
              
                test: add legacy build system compile tests
              
              
                Bushuo aaed465
              
                test: print stderr output on failure
              
              
                Bushuo 107e510
              
                refactor: extract fn to get binary dir
              
              
                Bushuo 18dddc3
              
                fix: windows binary path
              
              
                Bushuo 66974f9
              
                fix: pass bsc-path arg only to specific subcommands
              
              
                Bushuo d2c561d
              
                test: add package to testrepo deps
              
              
                Bushuo 7742361
              
                test: update snapshots
              
              
                Bushuo aca77bd
              
                Merge branch 'master' into rewatch-cli-refactor
              
              
                Bushuo fb9400c
              
                test: improve test output
              
              
                Bushuo 9bf9d43
              
                fix: args passing in cli wrapper
              
              
                Bushuo 7faf311
              
                fix: pass `--bsc-path` to implicit build command
              
              
                Bushuo b730d9f
              
                fix: wrong path to `rescript` executable
              
              
                Bushuo f003508
              
                fix: legacy tests inconsistency
              
              
                Bushuo c88b2d4
              
                test: is error output printed correctly
              
              
                Bushuo 876b797
              
                debug: print whole output of rewatch legacy
              
              
                Bushuo 635159b
              
                fix: node script invocation on windows
              
              
                Bushuo 2006080
              
                Update CHANGELOG.md
              
              
                Bushuo 834f890
              
                Update CHANGELOG.md
              
              
                Bushuo File filter
Filter by extension
Conversations
          Failed to load comments.   
        
        
          
      Loading
        
  Jump to
        
          Jump to file
        
      
      
          Failed to load files.   
        
        
          
      Loading
        
  Diff view
Diff view
There are no files selected for viewing
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -1,3 +1,5 @@ | ||
| * text=auto eol=lf | ||
|  | ||
| *.ml linguist-language=OCaml | ||
| *.mli linguist-language=OCaml | ||
| *.res linguist-language=ReScript | ||
|  | ||
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -0,0 +1,178 @@ | ||
| use std::ffi::OsString; | ||
|  | ||
| use clap::{Args, Parser, Subcommand}; | ||
| use clap_verbosity_flag::InfoLevel; | ||
|  | ||
| /// Rewatch is an alternative build system for the Rescript Compiler bsb (which uses Ninja internally). It strives | ||
| /// to deliver consistent and faster builds in monorepo setups with multiple packages, where the | ||
| /// default build system fails to pick up changed interfaces across multiple packages. | ||
| #[derive(Parser, Debug)] | ||
| #[command(version)] | ||
| #[command(args_conflicts_with_subcommands = true)] | ||
| pub struct Cli { | ||
| /// Verbosity: | ||
| /// -v -> Debug | ||
| /// -vv -> Trace | ||
| /// -q -> Warn | ||
| /// -qq -> Error | ||
| /// -qqq -> Off. | ||
| /// Default (/ no argument given): 'info' | ||
| #[command(flatten)] | ||
| pub verbose: clap_verbosity_flag::Verbosity<InfoLevel>, | ||
|  | ||
| /// The command to run. If not provided it will default to build. | ||
| #[command(subcommand)] | ||
| pub command: Option<Command>, | ||
|  | ||
| /// The relative path to where the main rescript.json resides. IE - the root of your project. | ||
| #[arg(default_value = ".")] | ||
| pub folder: String, | ||
|  | ||
| #[command(flatten)] | ||
| pub build_args: BuildArgs, | ||
| } | ||
|  | ||
| #[derive(Args, Debug, Clone)] | ||
| pub struct BuildArgs { | ||
| /// Filter files by regex | ||
| /// | ||
| /// Filter allows for a regex to be supplied which will filter the files to be compiled. For | ||
| /// instance, to filter out test files for compilation while doing feature work. | ||
| #[arg(short, long)] | ||
| pub filter: Option<String>, | ||
|  | ||
| /// Action after build | ||
| /// | ||
| /// This allows one to pass an additional command to the watcher, which allows it to run when | ||
| /// finished. For instance, to play a sound when done compiling, or to run a test suite. | ||
| /// NOTE - You may need to add '--color=always' to your subcommand in case you want to output | ||
| /// color as well | ||
| #[arg(short, long)] | ||
| pub after_build: Option<String>, | ||
|  | ||
| /// Create source_dirs.json | ||
| /// | ||
| /// This creates a source_dirs.json file at the root of the monorepo, which is needed when you | ||
| /// want to use Reanalyze | ||
| #[arg(short, long, default_value_t = false, num_args = 0..=1)] | ||
| pub create_sourcedirs: bool, | ||
|  | ||
| /// Build development dependencies | ||
| /// | ||
| /// This is the flag to also compile development dependencies | ||
| /// It's important to know that we currently do not discern between project src, and | ||
| /// dependencies. So enabling this flag will enable building _all_ development dependencies of | ||
| /// _all_ packages | ||
| #[arg(long, default_value_t = false, num_args = 0..=1)] | ||
| pub dev: bool, | ||
|  | ||
| /// Disable timing on the output | ||
| #[arg(short, long, default_value_t = false, num_args = 0..=1)] | ||
| pub no_timing: bool, | ||
|  | ||
| /// simple output for snapshot testing | ||
| #[arg(short, long, default_value = "false", num_args = 0..=1)] | ||
| pub snapshot_output: bool, | ||
|  | ||
| /// Path to bsc | ||
| #[arg(long)] | ||
| pub bsc_path: Option<String>, | ||
| } | ||
|  | ||
| #[derive(Args, Clone, Debug)] | ||
| pub struct WatchArgs { | ||
| /// Filter files by regex | ||
| /// | ||
| /// Filter allows for a regex to be supplied which will filter the files to be compiled. For | ||
| /// instance, to filter out test files for compilation while doing feature work. | ||
| #[arg(short, long)] | ||
| pub filter: Option<String>, | ||
|  | ||
| /// Action after build | ||
| /// | ||
| /// This allows one to pass an additional command to the watcher, which allows it to run when | ||
| /// finished. For instance, to play a sound when done compiling, or to run a test suite. | ||
| /// NOTE - You may need to add '--color=always' to your subcommand in case you want to output | ||
| /// color as well | ||
| #[arg(short, long)] | ||
| pub after_build: Option<String>, | ||
|  | ||
| /// Create source_dirs.json | ||
| /// | ||
| /// This creates a source_dirs.json file at the root of the monorepo, which is needed when you | ||
| /// want to use Reanalyze | ||
| #[arg(short, long, default_value_t = false, num_args = 0..=1)] | ||
| pub create_sourcedirs: bool, | ||
|  | ||
| /// Build development dependencies | ||
| /// | ||
| /// This is the flag to also compile development dependencies | ||
| /// It's important to know that we currently do not discern between project src, and | ||
| /// dependencies. So enabling this flag will enable building _all_ development dependencies of | ||
| /// _all_ packages | ||
| #[arg(long, default_value_t = false, num_args = 0..=1)] | ||
| pub dev: bool, | ||
|  | ||
| /// simple output for snapshot testing | ||
| #[arg(short, long, default_value = "false", num_args = 0..=1)] | ||
| pub snapshot_output: bool, | ||
|  | ||
| /// Path to bsc | ||
| #[arg(long)] | ||
| pub bsc_path: Option<String>, | ||
| } | ||
|  | ||
| #[derive(Subcommand, Clone, Debug)] | ||
| pub enum Command { | ||
| /// Build using Rewatch | ||
| Build(BuildArgs), | ||
| /// Build, then start a watcher | ||
| Watch(WatchArgs), | ||
| /// Clean the build artifacts | ||
| Clean { | ||
| /// Path to bsc | ||
| #[arg(long)] | ||
| bsc_path: Option<String>, | ||
|  | ||
| /// simple output for snapshot testing | ||
| #[arg(short, long, default_value = "false", num_args = 0..=1)] | ||
| snapshot_output: bool, | ||
| }, | ||
| /// Alias to `legacy format`. | ||
| #[command(disable_help_flag = true)] | ||
| Format { | ||
| #[arg(allow_hyphen_values = true, num_args = 0..)] | ||
| format_args: Vec<OsString>, | ||
| }, | ||
| /// Alias to `legacy dump`. | ||
| #[command(disable_help_flag = true)] | ||
| Dump { | ||
| #[arg(allow_hyphen_values = true, num_args = 0..)] | ||
| dump_args: Vec<OsString>, | ||
| }, | ||
| /// This prints the compiler arguments. It expects the path to a rescript.json file. | ||
| CompilerArgs { | ||
| /// Path to a rescript.json file | ||
| #[command()] | ||
| path: String, | ||
|  | ||
| #[arg(long, default_value_t = false, num_args = 0..=1)] | ||
| dev: bool, | ||
|  | ||
| /// To be used in conjunction with compiler_args | ||
| #[arg(long)] | ||
| rescript_version: Option<String>, | ||
|  | ||
| /// A custom path to bsc | ||
| #[arg(long)] | ||
| bsc_path: Option<String>, | ||
| }, | ||
| /// Use the legacy build system. | ||
| /// | ||
| /// After this command is encountered, the rest of the arguments are passed to the legacy build system. | ||
| #[command(disable_help_flag = true)] | ||
| Legacy { | ||
| #[arg(allow_hyphen_values = true, num_args = 0..)] | ||
| legacy_args: Vec<OsString>, | ||
| }, | ||
| } | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
              | Original file line number | Diff line number | Diff line change | 
|---|---|---|
| @@ -1,4 +1,5 @@ | ||
| pub mod build; | ||
| pub mod cli; | ||
| pub mod cmd; | ||
| pub mod config; | ||
| pub mod helpers; | ||
|  | ||
      
      Oops, something went wrong.
        
    
  
      
      Oops, something went wrong.
        
    
  
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why do we need this branch? can we not just pass --bsc-path in both cases?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
bsc-path is not a root level arg anymore
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It might be an option to use an env var
BSC_PATHinstead to avoid this problem?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I like this idea. Either that, or we promote
--bsc-pathto a root level argument again. If we decide for the env var would this be in addition to the arg?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My thinking was that it would replace the arg. What's your opinion @jfrolich?