标签的 Rubocop

问题描述 投票:0回答:6

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

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

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

我们怎样才能超越所有这些规则成为太空合规者?

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

ruby syntax tabs space rubocop
6个回答
11
投票

添加到您的

.rubocop.yml

Style/Tab:
  Enabled: false

禁用制表符规则。

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


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}")

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


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


1
投票

耐心点,我亲爱的同事们,希望 PR 进入 Rubocop 核心 以启用标签缩进将很快合并。现在,您可以在项目的某处创建以下 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

0
投票

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


0
投票

最新(1.50.2)版本答案

在你的 .rubocop.yml 中使用这个:

Layout/IndentationStyle:
    Enabled: false
© www.soinside.com 2019 - 2024. All rights reserved.