Skip to content

Commit

Permalink
Improve language switch detection
Browse files Browse the repository at this point in the history
Fix #3461

- Remove fable-py support
- Don't default to javascript if the language requested by the user is unknown (help detect typo)
- Improve --help message for the --lang section
  • Loading branch information
Maxime Mangel committed Aug 14, 2023
1 parent a0f79ec commit ca93af4
Showing 1 changed file with 42 additions and 19 deletions.
61 changes: 42 additions & 19 deletions src/Fable.Cli/Entry.fs
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,20 @@ let knownCliArgs() = [
"(Intended for plugin development)"]
[], []
["--optimize"], ["Compile with optimized F# AST (experimental)"]
["--lang"; "--language"], ["Compile to JavaScript (default), TypeScript, Php or Python."
"Support for TypeScript, Php and Python is experimental."]
["--lang"; "--language"], ["Choose wich languages to compile to"
""
"Available options:"
" - javascript (alias js)"
" - typescript (alias ts)"
" - python (alias py)"
" - rust (alias rs)"
" - php"
" - dart"
""
"Default is javascript"
""
"Support for TypeScript, Python, Rust, Php and Dart is experimental."
]

// Hidden args
["--precompiledLib"], []
Expand Down Expand Up @@ -136,23 +148,34 @@ Arguments:
let argLanguage (args: CliArgs) =
args.Value("--lang", "--language")
|> Option.orElseWith (fun () -> if args.FlagEnabled("--typescript") then Some "ts" else None) // Compatibility with "--typescript"
|> Option.map (fun lang -> lang.ToLower())
|> Option.defaultWith (fun () ->
// Set default language based on name of executing process (fable tool).
let proc = System.Reflection.Assembly.GetEntryAssembly().Location
match Path.GetFileNameWithoutExtension(proc) with
| "fable-py" -> Python
| _ -> JavaScript
|> string
|> Option.map (fun lang ->
let lang = lang.ToLower()

match lang with
| "js" | "javascript" -> Ok JavaScript
| "ts" | "typescript" -> Ok TypeScript
| "py" | "python" -> Ok Python
| "php" -> Ok Php
| "dart" -> Ok Dart
| "rs" | "rust" -> Ok Rust
| unknown ->
let errorMessage =
[
$"'{unknown}' is not a valid language."
""
"Available options:"
" - javascript (alias js)"
" - typescript (alias ts)"
" - python (alias py)"
" - rust (alias rs)"
" - php"
" - dart"
]
|> String.concat "\n"

Error errorMessage
)
|> (function
| "js" | "javascript" -> JavaScript
| "ts" | "typescript" -> TypeScript
| "py" | "python" -> Python
| "php" -> Php
| "dart" -> Dart
| "rs" | "rust" -> Rust
| _ -> JavaScript)
|> Option.defaultValue (Ok JavaScript)

type Runner =
static member Run(args: CliArgs, language: Language, rootDir: string, runProc: RunProcess option, ?fsprojPath: string, ?watch, ?precompile) = result {
Expand Down Expand Up @@ -400,7 +423,7 @@ let main argv =
| argv -> argv |> List.splitWhile (fun x -> x.StartsWith("-") |> not)

let! args = parseCliArgs args
let language = argLanguage args
let! language = argLanguage args
Compiler.SetLanguageUnsafe language

let rootDir =
Expand Down

0 comments on commit ca93af4

Please sign in to comment.