Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
一个人扛起一支队伍
brew
提交
2a4c9f61
B
brew
项目概览
一个人扛起一支队伍
/
brew
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
brew
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
2a4c9f61
编写于
8月 31, 2020
作者:
M
Mike McQuaid
提交者:
GitHub
8月 31, 2020
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #8530 from Rylan12/fix-disable-and-deprecate-reasons
Fix disable and deprecate reasons
上级
f84f0e80
4d0a1ff7
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
640 addition
and
152 deletion
+640
-152
Library/Homebrew/formula.rb
Library/Homebrew/formula.rb
+8
-6
Library/Homebrew/formula_installer.rb
Library/Homebrew/formula_installer.rb
+25
-2
Library/Homebrew/rubocops.rb
Library/Homebrew/rubocops.rb
+1
-1
Library/Homebrew/rubocops/deprecate.rb
Library/Homebrew/rubocops/deprecate.rb
+0
-37
Library/Homebrew/rubocops/deprecate_disable.rb
Library/Homebrew/rubocops/deprecate_disable.rb
+87
-0
Library/Homebrew/sorbet/files.yaml
Library/Homebrew/sorbet/files.yaml
+2
-2
Library/Homebrew/test/.rubocop_todo.yml
Library/Homebrew/test/.rubocop_todo.yml
+2
-1
Library/Homebrew/test/rubocops/deprecate_disable_spec.rb
Library/Homebrew/test/rubocops/deprecate_disable_spec.rb
+515
-0
Library/Homebrew/test/rubocops/deprecate_spec.rb
Library/Homebrew/test/rubocops/deprecate_spec.rb
+0
-103
未找到文件。
Library/Homebrew/formula.rb
浏览文件 @
2a4c9f61
...
...
@@ -1151,7 +1151,7 @@ class Formula
# The reason this {Formula} is deprecated.
# Returns `nil` if no reason is specified or the formula is not deprecated.
# @method deprecation_reason
# @return [String]
# @return [String
, Symbol
]
delegate
deprecation_reason: :"self.class"
# Whether this {Formula} is disabled (i.e. cannot be installed).
...
...
@@ -1163,7 +1163,7 @@ class Formula
# The reason this {Formula} is disabled.
# Returns `nil` if no reason is specified or the formula is not disabled.
# @method disable_reason
# @return [String]
# @return [String
, Symbol
]
delegate
disable_reason: :"self.class"
def
skip_cxxstdlib_check?
...
...
@@ -2778,7 +2778,8 @@ class Formula
# Deprecates a {Formula} (on a given date, if provided) so a warning is
# shown on each installation. If the date has not yet passed the formula
# will not be deprecated.
# <pre>deprecate! date: "2020-08-27", because: "it is no longer maintained"</pre>
# <pre>deprecate! date: "2020-08-27", because: :unmaintained</pre>
# <pre>deprecate! date: "2020-08-27", because: "it has been replaced by"</pre>
def
deprecate!
(
date:
nil
,
because:
nil
)
# TODO: enable for next major/minor release
# odeprecated "`deprecate!` without a reason", "`deprecate! because: \"reason\"`" if because.blank?
...
...
@@ -2798,13 +2799,14 @@ class Formula
# The reason for deprecation of a {Formula}.
# Returns `nil` if no reason was provided or the formula is not deprecated.
# @return [String]
# @return [String
, Symbol
]
attr_reader
:deprecation_reason
# Disables a {Formula} (on a given date, if provided) so it cannot be
# installed. If the date has not yet passed the formula
# will be deprecated instead of disabled.
# <pre>disable! date: "2020-08-27", because: "it no longer builds"</pre>
# <pre>disable! date: "2020-08-27", because: :does_not_build</pre>
# <pre>disable! date: "2020-08-27", because: "has been replaced by foo"</pre>
def
disable!
(
date:
nil
,
because:
nil
)
# TODO: enable for next major/minor release
# odeprecated "`disable!` without a reason", "`disable! because: \"reason\"`" if because.blank?
...
...
@@ -2828,7 +2830,7 @@ class Formula
# The reason for a {Formula} is disabled.
# Returns `nil` if no reason was provided or the formula is not disabled.
# @return [String]
# @return [String
, Symbol
]
attr_reader
:disable_reason
# @private
...
...
Library/Homebrew/formula_installer.rb
浏览文件 @
2a4c9f61
...
...
@@ -202,15 +202,38 @@ class FormulaInstaller
def
check_install_sanity
raise
FormulaInstallationAlreadyAttemptedError
,
formula
if
self
.
class
.
attempted
.
include?
(
formula
)
deprecate_disable_reasons
=
{
does_not_build:
"does not build"
,
no_license:
"has no license"
,
repo_archived:
"has an archived upstream repository"
,
repo_removed:
"has a removed upstream repository"
,
unmaintained:
"is not maintained upstream"
,
unsupported:
"is not supported upstream"
,
deprecated_upstream:
"is deprecated upstream"
,
versioned_formula:
"is a versioned formula"
,
}
if
formula
.
deprecated?
if
formula
.
deprecation_reason
.
present?
opoo
"
#{
formula
.
full_name
}
has been deprecated because
#{
formula
.
deprecation_reason
}
!"
reason
=
if
deprecate_disable_reasons
.
key?
formula
.
deprecation_reason
deprecate_disable_reasons
[
formula
.
deprecation_reason
]
else
deprecate_disable_reasons
end
opoo
"
#{
formula
.
full_name
}
has been deprecated because it
#{
reason
}
!"
else
opoo
"
#{
formula
.
full_name
}
has been deprecated!"
end
elsif
formula
.
disabled?
if
formula
.
disable_reason
.
present?
odie
"
#{
formula
.
full_name
}
has been disabled because
#{
formula
.
disable_reason
}
!"
reason
=
if
deprecate_disable_reasons
.
key?
formula
.
disable_reason
deprecate_disable_reasons
[
formula
.
disable_reason
]
else
deprecate_disable_reasons
end
odie
"
#{
formula
.
full_name
}
has been disabled because it
#{
reason
}
!"
else
odie
"
#{
formula
.
full_name
}
has been disabled!"
end
...
...
Library/Homebrew/rubocops.rb
浏览文件 @
2a4c9f61
...
...
@@ -22,6 +22,6 @@ require "rubocops/uses_from_macos"
require
"rubocops/files"
require
"rubocops/keg_only"
require
"rubocops/version"
require
"rubocops/deprecate"
require
"rubocops/deprecate
_disable
"
require
"rubocops/rubocop-cask"
Library/Homebrew/rubocops/deprecate.rb
已删除
100644 → 0
浏览文件 @
f84f0e80
# frozen_string_literal: true
require
"rubocops/extend/formula"
module
RuboCop
module
Cop
module
FormulaAudit
# This cop audits deprecate! date
class
DeprecateDate
<
FormulaCop
def
audit_formula
(
_node
,
_class_node
,
_parent_class_node
,
body_node
)
deprecate_node
=
find_node_method_by_name
(
body_node
,
:deprecate!
)
return
if
deprecate_node
.
nil?
deprecate_date
(
deprecate_node
)
do
|
date_node
|
Date
.
iso8601
(
string_content
(
date_node
))
rescue
ArgumentError
fixed_date_string
=
Date
.
parse
(
string_content
(
date_node
)).
iso8601
offending_node
(
date_node
)
problem
"Use `
#{
fixed_date_string
}
` to comply with ISO 8601"
end
end
def
autocorrect
(
node
)
lambda
do
|
corrector
|
fixed_fixed_date_string
=
Date
.
parse
(
string_content
(
node
)).
iso8601
corrector
.
replace
(
node
.
source_range
,
"
\"
#{
fixed_fixed_date_string
}
\"
"
)
end
end
def_node_search
:deprecate_date
,
<<~
EOS
(pair (sym :date) $str)
EOS
end
end
end
end
Library/Homebrew/rubocops/deprecate_disable.rb
0 → 100644
浏览文件 @
2a4c9f61
# frozen_string_literal: true
require
"rubocops/extend/formula"
module
RuboCop
module
Cop
module
FormulaAudit
# This cop audits deprecate! date and disable! date
class
DeprecateDisableDate
<
FormulaCop
def
audit_formula
(
_node
,
_class_node
,
_parent_class_node
,
body_node
)
[
:deprecate!
,
:disable!
].
each
do
|
method
|
node
=
find_node_method_by_name
(
body_node
,
method
)
next
if
node
.
nil?
date
(
node
)
do
|
date_node
|
Date
.
iso8601
(
string_content
(
date_node
))
rescue
ArgumentError
fixed_date_string
=
Date
.
parse
(
string_content
(
date_node
)).
iso8601
offending_node
(
date_node
)
problem
"Use `
#{
fixed_date_string
}
` to comply with ISO 8601"
end
end
end
def
autocorrect
(
node
)
lambda
do
|
corrector
|
fixed_fixed_date_string
=
Date
.
parse
(
string_content
(
node
)).
iso8601
corrector
.
replace
(
node
.
source_range
,
"
\"
#{
fixed_fixed_date_string
}
\"
"
)
end
end
def_node_search
:date
,
<<~
EOS
(pair (sym :date) $str)
EOS
end
# This cop audits deprecate! reason
class
DeprecateDisableReason
<
FormulaCop
def
audit_formula
(
_node
,
_class_node
,
_parent_class_node
,
body_node
)
[
:deprecate!
,
:disable!
].
each
do
|
method
|
node
=
find_node_method_by_name
(
body_node
,
method
)
next
if
node
.
nil?
reason_found
=
false
reason
(
node
)
do
|
reason_node
|
reason_found
=
true
next
if
reason_node
.
sym_type?
offending_node
(
reason_node
)
reason_string
=
string_content
(
reason_node
)
problem
"Do not start the reason with `it`"
if
reason_string
.
start_with?
(
"it "
)
problem
"Do not end the reason with a punctuation mark"
if
%w[. ! ?]
.
include?
(
reason_string
[
-
1
])
end
next
if
reason_found
case
method
when
:deprecate!
problem
'Add a reason for deprecation: `deprecate! because: "..."`'
when
:disable!
problem
'Add a reason for disabling: `disable! because: "..."`'
end
end
end
def
autocorrect
(
node
)
return
unless
node
.
str_type?
lambda
do
|
corrector
|
reason
=
string_content
(
node
)
reason
=
reason
[
3
..
]
if
reason
.
start_with?
(
"it "
)
reason
.
chop!
if
%w[. ! ?]
.
include?
(
reason
[
-
1
])
corrector
.
replace
(
node
.
source_range
,
"
\"
#{
reason
}
\"
"
)
end
end
def_node_search
:reason
,
<<~
EOS
(pair (sym :because) ${str sym})
EOS
end
end
end
end
Library/Homebrew/sorbet/files.yaml
浏览文件 @
2a4c9f61
...
...
@@ -635,7 +635,7 @@ false:
-
./test/rubocops/components_redundancy_spec.rb
-
./test/rubocops/conflicts_spec.rb
-
./test/rubocops/dependency_order_spec.rb
-
./test/rubocops/deprecate_spec.rb
-
./test/rubocops/deprecate_
disable_
spec.rb
-
./test/rubocops/formula_desc_spec.rb
-
./test/rubocops/homepage_spec.rb
-
./test/rubocops/lines_spec.rb
...
...
@@ -895,7 +895,7 @@ true:
-
./rubocops/cask/constants/stanza.rb
-
./rubocops/cask/desc.rb
-
./rubocops/cask/extend/string.rb
-
./rubocops/deprecate.rb
-
./rubocops/deprecate
_disable
.rb
-
./tap_constants.rb
-
./test/support/helper/fixtures.rb
-
./test/support/lib/config.rb
...
...
Library/Homebrew/test/.rubocop_todo.yml
浏览文件 @
2a4c9f61
...
...
@@ -21,7 +21,7 @@ RSpec/InstanceVariable:
-
'
utils/git_spec.rb'
-
'
version_spec.rb'
# Offense count: 7
5
# Offense count: 7
6
RSpec/MultipleDescribes
:
Exclude
:
-
'
ENV_spec.rb'
...
...
@@ -93,6 +93,7 @@ RSpec/MultipleDescribes:
-
'
patch_spec.rb'
-
'
rubocops/checksum_spec.rb'
-
'
rubocops/class_spec.rb'
-
'
rubocops/deprecate_disable_spec.rb'
-
'
rubocops/formula_desc_spec.rb'
-
'
rubocops/lines_spec.rb'
-
'
rubocops/text_spec.rb'
...
...
Library/Homebrew/test/rubocops/deprecate_disable_spec.rb
0 → 100644
浏览文件 @
2a4c9f61
# frozen_string_literal: true
require
"rubocops/deprecate_disable"
describe
RuboCop
::
Cop
::
FormulaAudit
::
DeprecateDisableDate
do
subject
(
:cop
)
{
described_class
.
new
}
context
"When auditing formula for deprecate! date:"
do
it
"deprecation date is not ISO 8601 compliant"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "June 25, 2020"
^^^^^^^^^^^^^^^ Use `2020-06-25` to comply with ISO 8601
end
RUBY
end
it
"deprecation date is not ISO 8601 compliant with reason"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken", date: "June 25, 2020"
^^^^^^^^^^^^^^^ Use `2020-06-25` to comply with ISO 8601
end
RUBY
end
it
"deprecation date is ISO 8601 compliant"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "2020-06-25"
end
RUBY
end
it
"deprecation date is ISO 8601 compliant with reason"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken", date: "2020-06-25"
end
RUBY
end
it
"no deprecation date"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate!
end
RUBY
end
it
"no deprecation date with reason"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken"
end
RUBY
end
it
"auto corrects to ISO 8601 format"
do
source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "June 25, 2020"
end
RUBY
corrected_source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "2020-06-25"
end
RUBY
new_source
=
autocorrect_source
(
source
)
expect
(
new_source
).
to
eq
(
corrected_source
)
end
it
"auto corrects to ISO 8601 format with reason"
do
source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken", date: "June 25, 2020"
end
RUBY
corrected_source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken", date: "2020-06-25"
end
RUBY
new_source
=
autocorrect_source
(
source
)
expect
(
new_source
).
to
eq
(
corrected_source
)
end
end
context
"When auditing formula for disable! date:"
do
it
"disable date is not ISO 8601 compliant"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! date: "June 25, 2020"
^^^^^^^^^^^^^^^ Use `2020-06-25` to comply with ISO 8601
end
RUBY
end
it
"disable date is not ISO 8601 compliant with reason"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "is broken", date: "June 25, 2020"
^^^^^^^^^^^^^^^ Use `2020-06-25` to comply with ISO 8601
end
RUBY
end
it
"disable date is ISO 8601 compliant"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! date: "2020-06-25"
end
RUBY
end
it
"disable date is ISO 8601 compliant with reason"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "is broken", date: "2020-06-25"
end
RUBY
end
it
"no disable date"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable!
end
RUBY
end
it
"no disable date with reason"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "is broken"
end
RUBY
end
it
"auto corrects to ISO 8601 format"
do
source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! date: "June 25, 2020"
end
RUBY
corrected_source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! date: "2020-06-25"
end
RUBY
new_source
=
autocorrect_source
(
source
)
expect
(
new_source
).
to
eq
(
corrected_source
)
end
it
"auto corrects to ISO 8601 format with reason"
do
source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "is broken", date: "June 25, 2020"
end
RUBY
corrected_source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "is broken", date: "2020-06-25"
end
RUBY
new_source
=
autocorrect_source
(
source
)
expect
(
new_source
).
to
eq
(
corrected_source
)
end
end
end
describe
RuboCop
::
Cop
::
FormulaAudit
::
DeprecateDisableReason
do
subject
(
:cop
)
{
described_class
.
new
}
context
"When auditing formula for deprecate! because:"
do
it
"deprecation reason is acceptable"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken"
end
RUBY
end
it
"deprecation reason is acceptable as a symbol"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: :does_not_build
end
RUBY
end
it
"deprecation reason is acceptable with date"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "2020-08-28", because: "is broken"
end
RUBY
end
it
"deprecation reason is acceptable as a symbol with date"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "2020-08-28", because: :does_not_build
end
RUBY
end
it
"deprecation reason is absent"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate!
^^^^^^^^^^ Add a reason for deprecation: `deprecate! because: "..."`
end
RUBY
end
it
"deprecation reason is absent with date"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "2020-08-28"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Add a reason for deprecation: `deprecate! because: "..."`
end
RUBY
end
it
"deprecation reason starts with `it`"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "it is broken"
^^^^^^^^^^^^^^ Do not start the reason with `it`
end
RUBY
end
it
"deprecation reason starts with `it` with date"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "2020-08-28", because: "it is broken"
^^^^^^^^^^^^^^ Do not start the reason with `it`
end
RUBY
end
it
"deprecation reason ends with a period"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken."
^^^^^^^^^^^^ Do not end the reason with a punctuation mark
end
RUBY
end
it
"deprecation reason ends with an exclamation point"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken!"
^^^^^^^^^^^^ Do not end the reason with a punctuation mark
end
RUBY
end
it
"deprecation reason ends with a question mark"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken?"
^^^^^^^^^^^^ Do not end the reason with a punctuation mark
end
RUBY
end
it
"deprecation reason ends with a period with date"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "2020-08-28", because: "is broken."
^^^^^^^^^^^^ Do not end the reason with a punctuation mark
end
RUBY
end
it
"auto corrects to remove `it`"
do
source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "it is broken"
end
RUBY
corrected_source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken"
end
RUBY
new_source
=
autocorrect_source
(
source
)
expect
(
new_source
).
to
eq
(
corrected_source
)
end
it
"auto corrects to remove punctuation"
do
source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken."
end
RUBY
corrected_source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken"
end
RUBY
new_source
=
autocorrect_source
(
source
)
expect
(
new_source
).
to
eq
(
corrected_source
)
end
end
context
"When auditing formula for disable! because:"
do
it
"disable reason is acceptable"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "is broken"
end
RUBY
end
it
"disable reason is acceptable as a symbol"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: :does_not_build
end
RUBY
end
it
"disable reason is acceptable with date"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! date: "2020-08-28", because: "is broken"
end
RUBY
end
it
"disable reason is acceptable as a symbol with date"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! date: "2020-08-28", because: :does_not_build
end
RUBY
end
it
"disable reason is absent"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable!
^^^^^^^^ Add a reason for disabling: `disable! because: "..."`
end
RUBY
end
it
"disable reason is absent with date"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! date: "2020-08-28"
^^^^^^^^^^^^^^^^^^^^^^^^^^^ Add a reason for disabling: `disable! because: "..."`
end
RUBY
end
it
"disable reason starts with `it`"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "it is broken"
^^^^^^^^^^^^^^ Do not start the reason with `it`
end
RUBY
end
it
"disable reason starts with `it` with date"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! date: "2020-08-28", because: "it is broken"
^^^^^^^^^^^^^^ Do not start the reason with `it`
end
RUBY
end
it
"disable reason ends with a period"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "is broken."
^^^^^^^^^^^^ Do not end the reason with a punctuation mark
end
RUBY
end
it
"disable reason ends with an exclamation point"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "is broken!"
^^^^^^^^^^^^ Do not end the reason with a punctuation mark
end
RUBY
end
it
"disable reason ends with a question mark"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "is broken?"
^^^^^^^^^^^^ Do not end the reason with a punctuation mark
end
RUBY
end
it
"disable reason ends with a period with date"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! date: "2020-08-28", because: "is broken."
^^^^^^^^^^^^ Do not end the reason with a punctuation mark
end
RUBY
end
it
"auto corrects to remove `it`"
do
source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "it is broken"
end
RUBY
corrected_source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "is broken"
end
RUBY
new_source
=
autocorrect_source
(
source
)
expect
(
new_source
).
to
eq
(
corrected_source
)
end
it
"auto corrects to remove punctuation"
do
source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "is broken."
end
RUBY
corrected_source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
disable! because: "is broken"
end
RUBY
new_source
=
autocorrect_source
(
source
)
expect
(
new_source
).
to
eq
(
corrected_source
)
end
end
end
Library/Homebrew/test/rubocops/deprecate_spec.rb
已删除
100644 → 0
浏览文件 @
f84f0e80
# frozen_string_literal: true
require
"rubocops/deprecate"
describe
RuboCop
::
Cop
::
FormulaAudit
::
DeprecateDate
do
subject
(
:cop
)
{
described_class
.
new
}
context
"When auditing formula for deprecate! date:"
do
it
"deprecation date is not ISO 8601 compliant"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "June 25, 2020"
^^^^^^^^^^^^^^^ Use `2020-06-25` to comply with ISO 8601
end
RUBY
end
it
"deprecation date is not ISO 8601 compliant with reason"
do
expect_offense
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken", date: "June 25, 2020"
^^^^^^^^^^^^^^^ Use `2020-06-25` to comply with ISO 8601
end
RUBY
end
it
"deprecation date is ISO 8601 compliant"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "2020-06-25"
end
RUBY
end
it
"deprecation date is ISO 8601 compliant with reason"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken", date: "2020-06-25"
end
RUBY
end
it
"no deprecation date"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate!
end
RUBY
end
it
"no deprecation date with reason"
do
expect_no_offenses
(
<<~
RUBY
)
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken"
end
RUBY
end
it
"auto corrects to ISO 8601 format"
do
source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "June 25, 2020"
end
RUBY
corrected_source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! date: "2020-06-25"
end
RUBY
new_source
=
autocorrect_source
(
source
)
expect
(
new_source
).
to
eq
(
corrected_source
)
end
it
"auto corrects to ISO 8601 format with reason"
do
source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken", date: "June 25, 2020"
end
RUBY
corrected_source
=
<<~
RUBY
class Foo < Formula
url 'https://brew.sh/foo-1.0.tgz'
deprecate! because: "is broken", date: "2020-06-25"
end
RUBY
new_source
=
autocorrect_source
(
source
)
expect
(
new_source
).
to
eq
(
corrected_source
)
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录