javascript - 如何使用 eslint 在 FormattedMessage 组件中强制描述属性

标签 javascript reactjs eslint formatjs

我正在使用 react-intl并且需要 FormattedMessage 的所有用途包含 description prop 以便翻译人员获得有关该字符串的一些上下文。我还需要使用 eslint 强制执行它规则,因此始终提醒整个团队为每个可翻译字符串提供描述。我该如何设置?

最佳答案

您可以按照这些文章创建自定义规则:
https://blog.scottlogic.com/2021/09/06/how-to-write-an-es-lint-rule-for-beginners.html
https://flexport.engineering/writing-custom-lint-rules-for-your-picky-developers-67732afa1803
我写了一条规则来强制执行 description支持一个名为 FormattedMessage 的组件

const ERROR_DESCRIPTION_MISSING =
  "FormattedMessage component should have a `description` prop";

module.exports = {
  meta: {
    type: "problem",
    schema: [],
  },
  create: (context) => {
    return {
      JSXOpeningElement: function (node) {
        const nodeType = node.name.name;
        if (nodeType !== "FormattedMessage") {
          return;
        }
        if (!node.attributes.find((attr) => attr.name.name === "description")) {
          context.report({
            node: node,
            message: ERROR_DESCRIPTION_MISSING,
          });
        }
      },
    };
  },
};
此规则将适用于任何名为 FormattedMessage 的组件。 .我不确定是否可以识别它的来源以检查它是否是 react-intl零件。
创建自定义 eslint 插件后,您需要将此新规则添加到您的项目中。这将取决于您的项目设置,但如果您使用 CRA,您可以按照此 guide
Here您可以看到该规则有效。只需克隆它并移至 custom-eslint-formatted-message目录,然后运行 ​​npm i npm run lint . vscode 还会检测规则并突出显示错误。
enter image description here

关于javascript - 如何使用 eslint 在 FormattedMessage 组件中强制描述属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69758272/

相关文章:

javascript - 如何为 JavaScript 函数提供特定上下文而不立即调用它

javascript - 将定制控制台与ESlint推荐的设置一起使用

javascript - React 功能组件 props 按字母顺序排序。 (在定义方面)

javascript - 变量被分配了一个值,但在 Vue 数据对象中声明它并在方法中使用它时从未使用过

javascript - ES6 函数绑定(bind)未定义(this.state 捕获值)

CSS 模块 - 将类排除在转换之外

javascript - 如何动态创建正则表达式

javascript - 如何从委托(delegate)函数(回调)访问服务变量

javascript - 通过类 html 内容对 html 单页站点进行 SEO

reactjs - 如何将多个 saga 添加到单个容器(两个 saga 监听不同的操作)