Module: SyntaxTree::CLI
- Defined in:
- lib/syntax_tree/cli.rb
Overview
Syntax Tree ships with the ‘stree` CLI, which can be used to inspect and manipulate Ruby code. This module is responsible for powering that CLI.
Defined Under Namespace
Classes: AST, Action, Check, Color, ConfigFile, Debug, Doc, FileItem, Format, Json, Match, Options, STDINItem, ScriptItem, Write
Constant Summary collapse
- HELP =
The help message displayed if the input arguments are not correctly ordered or formatted.
"\#{Color.bold(\"stree ast [--plugins=...] [--print-width=NUMBER] [-e SCRIPT] FILE\")}\n Print out the AST corresponding to the given files\n\n\#{Color.bold(\"stree check [--plugins=...] [--print-width=NUMBER] [-e SCRIPT] FILE\")}\n Check that the given files are formatted as syntax tree would format them\n\n\#{Color.bold(\"stree debug [--plugins=...] [--print-width=NUMBER] [-e SCRIPT] FILE\")}\n Check that the given files can be formatted idempotently\n\n\#{Color.bold(\"stree doc [--plugins=...] [-e SCRIPT] FILE\")}\n Print out the doc tree that would be used to format the given files\n\n\#{Color.bold(\"stree format [--plugins=...] [--print-width=NUMBER] [-e SCRIPT] FILE\")}\n Print out the formatted version of the given files\n\n\#{Color.bold(\"stree json [--plugins=...] [-e SCRIPT] FILE\")}\n Print out the JSON representation of the given files\n\n\#{Color.bold(\"stree match [--plugins=...] [-e SCRIPT] FILE\")}\n Print out a pattern-matching Ruby expression that would match the given files\n\n\#{Color.bold(\"stree help\")}\n Display this help message\n\n\#{Color.bold(\"stree lsp [--plugins=...] [--print-width=NUMBER]\")}\n Run syntax tree in language server mode\n\n\#{Color.bold(\"stree version\")}\n Output the current version of syntax tree\n\n\#{Color.bold(\"stree write [--plugins=...] [--print-width=NUMBER] [-e SCRIPT] FILE\")}\n Read, format, and write back the source of the given files\n\n--plugins=...\n A comma-separated list of plugins to load.\n\n--print-width=NUMBER\n The maximum line width to use when formatting.\n\n-e SCRIPT\n Parse an inline Ruby string.\n"
Class Method Summary collapse
-
.run(argv) ⇒ Object
Run the CLI over the given array of strings that make up the arguments passed to the invocation.
Class Method Details
.run(argv) ⇒ Object
Run the CLI over the given array of strings that make up the arguments passed to the invocation.
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 |
# File 'lib/syntax_tree/cli.rb', line 384 def run(argv) name, *arguments = argv config_file = ConfigFile.new arguments.unshift(*config_file.arguments) = Options.new .parse(arguments) action = case name when "a", "ast" AST.new() when "c", "check" Check.new() when "debug" Debug.new() when "doc" Doc.new() when "help" puts HELP return 0 when "j", "json" Json.new() when "lsp" require "syntax_tree/language_server" LanguageServer.new(print_width: .print_width).run return 0 when "m", "match" Match.new() when "f", "format" Format.new() when "version" puts SyntaxTree::VERSION return 0 when "w", "write" Write.new() else warn(HELP) return 1 end # We're going to build up a queue of items to process. queue = Queue.new # If there are any arguments or scripts, then we'll add those to the # queue. Otherwise we'll read the content off STDIN. if arguments.any? || .scripts.any? arguments.each do |pattern| Dir .glob(pattern) .each do |filepath| if File.readable?(filepath) && !File.fnmatch?(.ignore_files, filepath) queue << FileItem.new(filepath) end end end .scripts.each { |script| queue << ScriptItem.new(script) } else queue << STDINItem.new end # At the end, we're going to return whether or not this worker ever # encountered an error. if process_queue(queue, action) action.failure 1 else action.success 0 end end |