我们想使用 Rubocop 来验证我们的 ruby 在语法上是否正确并遵循基本代码指南。
除此之外,我们有这条规则:我们使用制表符缩进,以允许任何人决定他们希望如何呈现它们(将它们显示为 2 或 4 个空格)
问题是 rubocop 似乎设计为完全拒绝缩进标签。
我们怎样才能超越所有这些规则成为太空合规者?
编辑:我正在考虑覆盖此模块https://github.com/bbatsov/rubocop/blob/master/lib/rubocop/source_parser.rb 将我文件中的所有选项卡替换为 2 个空格以创建错觉对于宝石...
作为一个邪恶的顽固的标签用户,我最终就这样破解了它。 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}")
你现在应该完美融入。哇哈哈哈
对于最新版本,请将其添加到您的
.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
耐心点,我亲爱的同事们,希望 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
我覆盖了这个模块https://github.com/bbatsov/rubocop/blob/master/lib/rubocop/source_parser.rb 用 2 个空格替换我文件中的所有选项卡以创建宝石的幻觉...
在你的 .rubocop.yml 中使用这个:
Layout/IndentationStyle:
Enabled: false