diff --git a/Library/Homebrew/cli_parser.rb b/Library/Homebrew/cli_parser.rb
index 64b1eba481052b608fce4a20ca12701e26fe4bd9..56ca66be3156c14f673bc0bf7fdf225f2aba4c36 100644
--- a/Library/Homebrew/cli_parser.rb
+++ b/Library/Homebrew/cli_parser.rb
@@ -110,7 +110,7 @@ module Homebrew
         if name.length == 1
           "-#{name}"
         else
-          "--#{name}"
+          "--#{name.tr("_", "-")}"
         end
       end
 
diff --git a/Library/Homebrew/cmd/style.rb b/Library/Homebrew/cmd/style.rb
index 163d43e8879be00489a84e81a17334e750eaab98..d09a362f6fad87b86f60ef889e2936ef7b88be13 100644
--- a/Library/Homebrew/cmd/style.rb
+++ b/Library/Homebrew/cmd/style.rb
@@ -20,11 +20,41 @@
 require "json"
 require "open3"
 require "style"
+require "cli_parser"
 
 module Homebrew
   module_function
 
+  def style_args
+    Homebrew::CLI::Parser.new do
+      usage_banner <<~EOS
+        `style` [<options>] [<files>|<taps>|<formulae>]
+
+        Check formulae or files for conformance to Homebrew style guidelines.
+
+        Lists of <files>, <taps> and <formulae> may not be combined. If none are
+        provided, `style` will run style checks on the whole Homebrew library,
+        including core code and all formulae.
+      EOS
+      switch "--fix",
+        description: "Fix style violations automatically using RuboCop's auto-correct feature."
+      switch "--display-cop-names",
+        description: "Include the RuboCop cop name for each violation in the output."
+      comma_array "--only-cops",
+        description: "Specify a comma-separated <cops> list to check for violations of only the "\
+                     "listed RuboCop cops."
+      comma_array "--except-cops",
+        description: "Specify a comma-separated <cops> list to skip checking for violations of the "\
+                     "listed RuboCop cops."
+      switch :verbose
+      switch :debug
+      conflicts "--only-cops", "--except-cops"
+    end
+  end
+
   def style
+    style_args.parse
+
     target = if ARGV.named.empty?
       nil
     elsif ARGV.named.any? { |file| File.exist? file }
@@ -35,18 +65,15 @@ module Homebrew
       ARGV.formulae.map(&:path)
     end
 
-    only_cops = ARGV.value("only-cops").to_s.split(",")
-    except_cops = ARGV.value("except-cops").to_s.split(",")
-    if !only_cops.empty? && !except_cops.empty?
-      odie "--only-cops and --except-cops cannot be used simultaneously!"
-    end
+    only_cops = args.only_cops
+    except_cops = args.except_cops
 
-    options = { fix: ARGV.flag?("--fix") }
-    if !only_cops.empty?
+    options = { fix: args.fix? }
+    if only_cops
       options[:only_cops] = only_cops
-    elsif !except_cops.empty?
+    elsif except_cops
       options[:except_cops] = except_cops
-    elsif only_cops.empty? && except_cops.empty?
+    elsif only_cops.nil? && except_cops.nil?
       options[:except_cops] = %w[FormulaAudit
                                  FormulaAuditStrict
                                  NewFormulaAudit]