7

我们想使用 Rubocop 来验证我们的 ruby​​ 在语法上是否正确并遵循基本的代码指南。

从此我们有了这条规则:我们使用制表符缩进以允许任何人决定他们希望如何呈现它们(将它们显示为 2 或 4 个空格)

问题是 rubocop 似乎被设计为完全拒绝缩进标签。

我们如何才能超越所有这些规则成为空间兼容者?

编辑:我正在考虑覆盖此模块https://github.com/bbatsov/rubocop/blob/master/lib/rubocop/source_parser.rb将我文件中的所有选项卡替换为 2 个空格以创建 gem 的错觉...

4

5 回答 5

11

添加到您的.rubocop.yml

Style/Tab:
  Enabled: false

禁用选项卡规则。

您可以编写自己的自定义警察来检查正确的缩进。

于 2014-06-04T19:39:12.787 回答
6

作为一个邪恶的不悔改的标签用户,我最终像这样破解了它。0.32.1 的差异:

--- processed_source.rb.orig    2015-07-28 05:53:52.199418557 +0100
+++ processed_source.rb 2015-07-28 05:54:04.750420458 +0100
@@ -13,7 +13,7 @@
                 :parser_error, :raw_source

     def self.from_file(path)
-      file = File.read(path)
+      file = File.read(path).gsub(/^(\t+)/) {|m| '  ' * m.size }
       new(file, path)
     rescue
       abort("#{Rainbow('rubocop: No such file or directory').red} -- #{path}")

你现在应该完美地融入其中。哇哈哈哈。

于 2015-07-28T05:01:37.327 回答
1

对于最新版本,将其添加到您的.rubocop.yml文件中:

Layout/Tab:
  Enabled: false

您可以找到此处列出的所有默认选项:

https://github.com/rubocop-hq/rubocop/blob/master/config/default.yml

而且,规则在这里定义:

https://github.com/rubocop-hq/rubocop/blob/master/lib/rubocop/cop/layout/tab.rb

于 2018-11-26T10:53:42.087 回答
1

耐心,我亲爱的同事们,希望能很快合并到 Rubocop 核心中以启用制表符缩进的 PR 。现在,您可以在项目的某处创建以下 rb 文件,并在运行 rubocop 时需要它。

rubocop [...] --require rubocop_tabs.rb

rubocop_tabs.rb:

# frozen_string_literal: true

require 'rubocop'
require 'set'

RuboCop::ConfigLoader.default_configuration['Layout/Tab']['SupportedStyles'] = %w[tab space]
RuboCop::ConfigLoader.default_configuration['Layout/Tab']['EnforcedStyle'] = :space

module RuboCop
    module Cop
        module Layout
            class Tab < Cop
                include Alignment
                include RangeHelp
                include ConfigurableEnforcedStyle

                MSG = '%<type>s detected.'

                def investigate(processed_source)
                    str_ranges = string_literal_ranges(processed_source.ast)

                    processed_source.lines.each.with_index(1) do |line, lineno|
                        match = style == :tab ? line.match(/\A\s* +/) : line.match(/\A\t+/)
                        next unless match

                        range = source_range(processed_source.buffer, lineno, match.begin(0)...match.end(0))
                        next if in_string_literal?(str_ranges, range)

                        add_offense(range, location: range)
                    end
                end

                def autocorrect(range)
                    if style == :tab
                        lambda do |corrector|
                            corrector.replace(range, range.source.gsub(/\A\s+/) do |i|
                                "\t" * i.size
                            end)
                        end
                    else
                        lambda do |corrector|
                            spaces = ' ' * configured_indentation_width
                            corrector.replace(range, range.source.gsub(/\t/, spaces))
                        end
                    end
                end

                private

                def message(_node)
                    format(MSG, type: style == :tab ? 'Space' : 'Tab')
                end
            end
        end
    end
end

还将以下内容添加到您的.rubocop.yml

Layout/Tab:
  EnforcedStyle: tab
于 2020-04-11T12:10:22.677 回答
0

我覆盖了这个模块https://github.com/bbatsov/rubocop/blob/master/lib/rubocop/source_parser.rb 将我文件中的所有选项卡替换为 2 个空格,以创建 gem 的错觉......

于 2014-06-06T22:11:38.457 回答