问题标签 [rubocop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
88355 浏览

ruby-on-rails - “分配分支条件大小太高”是什么意思以及如何解决?

在我的 Rails 应用程序中,我Rubocop用来检查问题。今天它给了我这样的错误:Assignment Branch Condition size for show is too high。这是我的代码:

这是什么意思,我该如何解决?

0 投票
1 回答
3726 浏览

ruby - 为 Rubocop 重构多于两层的块嵌套

我正在努力改进我的 Ruby 代码,特别是在每个 Ruby 习惯用法的样式方面。我有以下方法:

Rubocop 对此抱怨,说我应该:

“避免超过 2 层的块嵌套。”

它专门指的是这一行:

但是,我根本不清楚为什么这是“违反样式”,我为“修复”这件事所做的任何事情似乎都会使代码更加混乱,至少在我看来是这样。

当我说我不明白为什么这是一种风格违规时,我明白 Rubocop 显然觉得我不应该有一个if...if...if排序结构。但我不确定为什么这是错误的。

我在想我也许可以通过使用某种保护子句来摆脱这段代码中的第一个 if 条件,但我不能这样做,因为这样我的代码就不起作用了。例如,我像这样更改了我的代码:

但是,虽然没有出错,但这确实使代码无法按预期工作。我试过了breakreturn而不是next

所以我不确定如何将这段代码变成 Rubocop 不会抱怨的形状并且仍然可以阅读。作为一个附带问题,我觉得我在“Ruby 样式”上花费了很多时间,即使我的代码确实有效。只要我能理解为什么这种风格是违规的,我不介意,但在这里我很难看到它。话虽这么说,但我确实了解到,要建立对这些东西的直觉,我还有很长的路要走。

关于上述问题,有人有什么想法吗?

0 投票
3 回答
1064 浏览

ruby - 重构 Rubocop 的长分支和过多分支方法

我在下面提供了一些发现的更新...

这是我当前代码中的一种方法:

Rubocop 讨厌这个有三个原因:

我不想跳过迭代,所以我不确定我为什么要使用next。对于这段代码来说,跳过迭代永远不会有意义。

因此,转到其他投诉,您会在此方法的顶部看到我已经分解了一个操作(对 的调用parse_conditions)。还有一个调用search_data_text。我在这里唯一的一点是我试图在似乎有意义的地方进行模块化。

即使我将那个大块search_conditions.each移到单独的方法中,Rubocop 也会抱怨我的新方法也太长了。我想这意味着添加我的第二种方法将调用的第三种方法?这对我来说似乎很奇怪。或者也许这意味着我不必分支太多,我猜。但是为什么分支不好?即使我切换到其他结构(比如案例......何时),我仍然在分支。而且我确实需要测试这些条件,因为嵌套数组、带有符号的数组或哈希的处理是不同的。

我正在努力建立自己的直觉,以便能够看到这样的问题并找出有效且高效的解决方案....但似乎我最终做的事情是非常低效和无效率。考虑到我看不出我的代码为什么不好,这种权衡让我很担心。

有谁介意尝试一下并帮助我了解如何使上述方法进入一种保持某种可读性但符合 Ruby 主义者喜欢的样式指南的状态?

---------------------- 更新 ----------

我能想到的最好的办法是:

check_conditions方法对于 Rubocop 来说仍然太长,并且仍然具有过高的分支条件大小。

据我所见,我检查过的任何地方都无法向我展示不同的东西,唯一可以做的就是从数组和哈希的检查中创建方法。换句话说,每个if条件check_conditions都会有自己的方法。但这对我来说似乎是不必要的愚蠢。我基本上是在分解逻辑,将变量传递给不同的方法,这样我就可以将我的方法计数保持在某个任意值以下。

作为一种设计方式,这对我来说是错误的。但是我看不到改变我的逻辑的方法,这样它仍然可以完成它需要做的事情,但是每个方法都在七行以下。

0 投票
1 回答
1613 浏览

ruby - 如何解决rubocop中的ruby格式错误?

错误 -

文件 -

消除“;”的适当格式是什么 以便 rubocop 停止警告我我的文件写错了?我想以正确的方式消除这种冒犯。

0 投票
1 回答
117 浏览

ruby - 收紧 Ruby 代码,制作小方法

我有一个方法被 RuboCop 报告为太长:每个方法只允许七行。这是有问题的方法:

我打算将顶级if条件转换为保护子句,但我不知道该怎么做。

我尝试将第 7 行和第 8 行合并为:

但这绝对行不通。

我无法激活 RuboCop 违规行为,也无法更改容差。

0 投票
1 回答
12750 浏览

arrays - 如何将 &:key 作为参数传递给 map 而不是 ruby​​ 块?

我写了这段代码:

我的 rubocop 说:

有没有做同样事情的捷径?

0 投票
1 回答
234 浏览

ruby - Ruby lint 错误用保护子句写这个的正确方法是什么

尝试运行命令,如果成功继续,如果失败引发错误并将命令输出发送到控制台。

代码正常运行,但 rubocop 不喜欢它。什么是改进此代码样式并仍为我提供相同功能的最佳方法?

0 投票
1 回答
1063 浏览

ruby-on-rails - Gitlab 上的 Pronto-Rubocop 不起作用,调用了错误的 URL

我在用着:

Gitlab 7.11.2

导轨 3.2

快速 0.4.2

pronto-rubocop 0.4.4

而且我在设置脚本以在 git 提交上运行 Rubocop 时遇到问题。我想使用 Pronto,所以只检查更改。我没有使用 GitLab 来托管,所以当我到达 Pronto 设置的这一点时,我不确定如何继续,https ://github.com/mmozuras/pronto :

将 GITLAB_API_ENDPOINT 环境变量设置为您的 API 端点 URL。如果您使用 Gitlab.com 的托管服务,您的端点将是https://gitlab.com/api/v3。将 GITLAB_API_PRIVATE_TOKEN 环境变量设置为您的 Gitlab 私有令牌,您可以在帐户设置中找到该令牌。

然后运行它:

GITLAB_API_ENDPOINT="https://gitlab.com/api/v3" GITLAB_API_PRIVATE_TOKEN=token pronto run -f gitlab -c origin/master

我在哪里运行最后一个命令?:

GITLAB_API_ENDPOINT="https://gitlab.com/api/v3" GITLAB_API_PRIVATE_TOKEN=token pronto run -f gitlab -c origin/master

我创建了一个 .gitlab-ci.yml 文件,它有:

但我不知道这是否正在运行。

我也没有像 Pronto 页面上提到的那样设置 GitlabFormatter,当我尝试查找有关它的信息时,它对我来说是模糊且无益的。

有人可以指出我正确的方向吗?

谢谢!

**更新

所以我暂时放弃了使用 .gitlab-ci.yml 文件路径,因为 gitlab-ci 上的工作有效。我找出了端点并在服务器上安装了所有必要的要求,并且所有东西都正确捆绑。

在该过程的最后,我运行:

GITLAB_API_ENDPOINT="https://gitlab.com/api/v3" GITLAB_API_PRIVATE_TOKEN=token pronto run -f gitlab -c origin/master

但它生成的 URL 不正确,我无法在提交中添加评论:

https://gitlab.com/api/v3/projects/10022%2Fname%2Fapp-name/repository/commits/ad87234..asdf87923/comments

我得到一个

(Gitlab::Error::NotFound)

我看起来像是来自这部分代码:

因为当我将它更改为时我可以看到 JSON

关于如何调用正确的 URL 的任何想法?

0 投票
6 回答
10214 浏览

ruby-on-rails - How to run Rubocop only on the changed files in a pull request?

I have created spec/lint/rubocop_spec.rb which runs Rubocop style checker on the files changed between current branch and master. This works when I test locally but not when the test run on the build server Circle.ci. I suspect it is because only the branch in question is downloaded, so it does not find any differences between master. Is there a better way than git co master && git pull origin master? Can I query the Github API perhaps to get the files changed listed?

0 投票
1 回答
13814 浏览

ruby - 解决圈和感知的复杂性

我的测试应用程序中有以下方法:

当我对包含此方法的文件运行 rubocop 工具时,我得到以下响应:

我没有得到它认为“太复杂”的东西,因此我无法弄清楚如何解决这个问题。理想情况下,我宁愿不只是告诉 rubocop 避免警告,因为毫无疑问它告诉我一些有用的东西。

正如您所看到的,就复杂的方法而言,我有几个if调用,然后我必须使用该@page对象以确保它设置正确。(这个例子,在上下文中,是一个 Watir-WebDriver 对象。)

我确实同意该方法很复杂,因为它需要检查是否@page已经存在并设置为某物,以及检查是否@page应该与@context. 但是——再说一次,我不知道该怎么办。

该方法所在模块的完整代码在这里:

https://github.com/jnyman/symbiont/blob/master/lib/symbiont/factory.rb

我最初认为我可以将其分解为不同的方法调用,这可能会降低每种方法的复杂性。但这意味着阅读我的代码的人必须跳到一系列不同的方法来理解on正在做什么。在我看来,仅仅移动东西似乎并不能消除整体的复杂性。相反,它只是把它洗牌。还是我错了?

任何建议在这里表示赞赏。

更新代码

我已经减少了一些。这是我现在拥有的:

根据反馈,我删除了一个unless似乎确实没用的限定符。我还删除了两行我发现可以在其他地方更好地使用的行(检查标题和网址)。

这完全消除了“感知的复杂性”,只剩下了这个:

我似乎“一点”(或任何术语)太复杂了。