【问题标题】:Why do linters pick on useless escape character?为什么 linter 会选择无用的转义字符?
【发布时间】:2020-08-30 01:59:11
【问题描述】:

转义字符串、模板文字和正则表达式中的非特殊字符没有任何效果

来源:https://eslint.org/docs/rules/no-useless-escape

但显然这是错误的:

这里没有什么可以“修复”的;我们都知道这是一个完全有效的字符序列。

开玩笑说这背后的原因是什么?

如果连 ESLint 都承认没有害处,那何必呢?如果你只看最终结果可能没用(我知道\ 字符不会被打印出来)但是在 "code is data" 上下文中,这可能是有用的数据在进行语法分析时。

ESLint 对字符串中的内容做出判断,但它不会与这段代码让步:(这对我来说也没什么用)

var x = 10;
var y = x + 0;
var z = y * 1;

【问题讨论】:

  • 只记录字符串,你就会看到问题
  • @Andreas 我知道“问题”是什么。这不是重点。
  • 转义字符没有用,很可能会以不希望的方式更改字符串的内容。那么为什么不应该反对呢?
  • @Andreas 我不确定内容是否是这里的问题,'\a'.length 是 1 而不是 2。如果错误消息说类似 “你的意思是转义这个字符?”“您可能需要转义 \,因为它不会被打印出来”.
  • @customcommander — 嗯。所以你可以理解目的,但你只是想抱怨错误信息不够可爱?

标签: javascript eslint static-analysis


【解决方案1】:

如果转义字符没有做任何有用的事情,它在做什么?

也许代码的编写者想要一个文字反斜杠字符。该错误引起了人们的注意,因此他们可以将\ 替换为\\

也许他们认为下一个角色需要转义。这会教育他们。

也许这只是一个错字。

既然没有理由让\在那里,只能有理由。有些比其他的更严重,但 linter 会引起他们的注意。

【讨论】:

  • 很公平。我想我只是对错误信息不满意。确实欢迎拉取请求。
  • 错误信息是完美的。我认为您需要具备编程完美主义者的心态才能理解像这样的 linting 规则的目的。
【解决方案2】:

一些 linting 规则旨在让您的代码完美

您可以根据需要转义字符,但有时它没有任何效果。如果你仍然这样做,你只是在你的代码中放了一个无意义的字符,让其他程序员感到困惑并浪费了 1 个字节。您的代码使用\_ 序列转义下划线字符,而\ 在该序列中不执行任何操作。

这条 lint 规则告诉你这一点。这不是世界末日,但使用 lint 规则,你想知道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多