为 remark-cli 配置 remark-lint-no-undefined-references plugin/rule 'Allow' 选项?

Configure remark-lint-no-undefined-references plugin/rule 'Allow' option for remark-cli?

原问题

我如何正确“configure" the (unified, remark, remark-lint) remark-lint-no-undefined-references plugin/rule "allow" option for use with the remark-cli?

我的目标是 configure the rule to ignore the Azure DevOps Wiki's 非标准 table 内容标签,[[_TOC_]]。我的简化设置需要:

  1. 所有包globally installed。可能不相关。
  2. 我有一个父文件夹:
    • 一个package.json文件。
    • 一个 Test 文件夹只包含一个 Test.md 文件,其内容只有这一行 [[_TOC_]].
  3. 在工作文件夹为上述父文件夹的命令提示符下,我执行:
    • remark Test

默认操作

默认操作,即只是 package.json 文件中指定的 plugin/rule,returns 预期的警告。这是,大概,由于非标准标签,[[_TOC_]]。这是我想关闭的警告。

package.json(默认)

{
    "remarkConfig": {
        "plugins": [
            "remark-lint-no-undefined-references"
    ]
    }
}

执行和预期警告(默认)

C:\..>remark Test
test\Test.md
  1:1-1:10  warning  Found reference to undefined definition  no-undefined-references  remark-lint
   1:2-1:9  warning  Found reference to undefined definition  no-undefined-references  remark-lint

‼ 2 warnings

我试过的

我已经尝试使 remark-lint-no-undefined-references API example and Configuration, 'rules can be configured in one standard way' 适应我的 package.json 文件。经过反复试验,我得到了这个看似有效的 json:

package.json

{
    "remarkConfig": {
        "plugins": [
            "remark-lint-no-undefined-references", [1, {
                "allow": ["[[_TOC_]]"]
            }]
        ]
    }
}

Online JSON Viewer and JSONLint indicate it's valid JSON. However, remark-cli 产生此错误。其他变化产生不同的错误。我被难住了。

C:\..>
Test\Test.md
  1:1  error  Error: Cannot parse file `package.json`
Expected preset, not `1`
    at Error (file:///C:/Users/scott.welker/AppData/Roaming/npm/node_modules/remark-cli/node_modules/fault/index.js:39:12)
    at file:///C:/Users/scott.welker/AppData/Roaming/npm/node_modules/remark-cli/node_modules/unified-engine/lib/find-up.js:190:15
    at done (file:///C:/Users/scott.welker/AppData/Roaming/npm/node_modules/remark-cli/node_modules/trough/index.js:145:7)

× 1 error

2022 年 3 月 14 日更新

感谢 a bit of help on GitHub Issue (#210),我取得了一些进步。但是,那不是正确的途径,并且已关闭。我的问题仍然存在。

有几件事是显而易见的

  1. 我最初推断的JSON、package.json是不正确的。请参阅下面的 黑掉了我的 JSON
  2. 我没能理解内容标签 [[_TOC_]] 的非标准 Azure DevOps Wiki table 是如何解释的。请参阅下面的 标记解释(控制台日志)
  3. 我的推断 package.json 似乎仍然不正确。请参阅下面的 我的 JSON 仍然是错误的

黑了我的 JSON

为了克服 ...Error: Cannot parse file 'package.json', Expected preset, not '1' 我破解了我的文件,所以我现在有了以下内容。此更改克服了错误并使我能够继续,但它似乎仍然不正确。参见 我的 JSON 一定还是错的

package.json 文件

{
    "remarkConfig": {
        "plugins": [
            "remark-lint-no-undefined-references", {
                "allow": ["_TOC_", "[_TOC_]"]
            }
        ]
    }
}

标签解释(console.log)

在破解我的 JSON 之后,我添加了 idrecommended console.log (..\npm\node_modules\remark-lint-no-undefined-references\index.js)。这表明 linting 将内容标签的 table 解释为相关降价的两个独立位,_TOC_[_TOC_]。我不喜欢这个。但是,以下调查结果表明这可能不是问题。参见 我的 JSON 一定还是错的

备注-cli

C:\..>remark Test
Id:  _TOC_
Id:  [_TOC_]
Test\Test.md
  1:1-1:10  warning  Found reference to undefined definition  no-undefined-references  remark-lint
   1:2-1:9  warning  Found reference to undefined definition  no-undefined-references  remark-lint

‼ 2 warnings

我的JSON一定还是错的

参考源 here (line 126) 中的另一个位置,当我用这个硬编码声明 const allow = new Set(["_TOC_", "[_TOC_]"]) 替换那个 const allow 定义时,我得到了想要的行为。例如:

备注-cli

C:\...>remark Test
Test\Test.md: no issues found

后续步骤:

  1. 看看我是否可以放弃 package.json 而改用纯 javascript。我的 JSON 不正确或者没有被正确解释。
  2. 继续JSON。我的推断很可能是错误的。
    • 以下猜测也无法抑制不需要的警告:

package.json

{
    "remarkConfig": {
        "plugins": [
            "remark-lint-no-undefined-references", [{
                "allow": ["_TOC_", "[_TOC_]"]
            }]
        ]
    }
}

更新 03/28/2022

CAUTION!
While the setup in this update is valid, the Test.js example code is flawed. See 03/30/2022 Update below.

跟进“下一步,看看我是否可以放弃 package.json 而改用纯 javascript

我似乎已经让它工作了,只是它抑制了所有警告,而不仅仅是我针对的少数(两个)警告。需要更多的开发和测试。

新设置

  1. 一个新的父 Node.js 应用程序文件夹,其中我有:
    • 选择重新安装所有软件包和一些新软件包,但不是全局(这次):
      • npm install to-vfile
      • npm install vfile-reporter
      • npm install remark
      • npm install remark-lint
      • npm install remark-lint-no-undefined-references
    • node_modules 文件夹。由 npm 安装(依赖项)创建和填充。
    • 一个package.json文件。由 npm installs 创建和填充。
    • 一个package-lock.json文件。由 npm installs 创建和填充。
    • 同一 Test 文件夹的副本,仅包含一个 Test.md 文件,其内容只有这一行 [[_TOC_]]
  2. 在工作文件夹为上述父文件夹的命令提示符下,我执行我的新节点/javascript代码:
    • node Test.js 见下文。代码注释说明了所有警告的意外抑制,即使是那些没有针对性的警告。

Test.js

警告! 此代码不正确。请参阅下面的 03/30/2022 更新

import {reporter} from 'vfile-reporter'
import {remark} from 'remark'
import remarkLint from 'remark-lint'
import remarkLintNoUndefinedReferences from 'remark-lint-no-undefined-references'
import {read} from 'to-vfile'

main()

async function main() {
  const file = await remark()
    .use(remarkLint)
    // This useage results in the expected warnings, '...Found reference to undefined definition...'
    .use(remarkLintNoUndefinedReferences)
    
    // This usage suppresses the warnings, as desired. However, note the next usage.
    //.use(remarkLintNoUndefinedReferences[ { allow: [ '_TOC_', '[_TOC_]' ] }])

    // This usage also suppresses the warning but it shoud not have done so.
    //.use(remarkLintNoUndefinedReferences[ { allow: [ '...', '…' ] }])

    // This usage (and related tests) seem to illustrate that anything in the allowed array suppresses all warnings. 
    //.use(remarkLintNoUndefinedReferences[ { allow: [ '' ] }])
    .process(await read('.\Test\Test.md'))

  console.error(reporter(file))
}

更新 03/30/2022

这是一个更正的 Test.js 文件,其中我的无效用法被注释掉,标记为 WRONG,两个正确的用法标记为 GOOD。最终用法纠正了我在 03/28/2022 更新中犯的错误。我现在有一个可用的 javascript 版本。我只需要将这个已知的工作版本修改为 remark-cli 的 package.json 文件。越来越近了。

我通过反复试验得出了这个 CORRECT,可以正常使用。通过将 console.log() 语句添加到 ..\remark-lint-no-undefined-references\index.js 源并根据反复重读 remark-lint Configure 部分的指导调整我的 javascript 代码,我的试错得到了帮助。

Test.js

import {reporter} from 'vfile-reporter'
import {remark} from 'remark'
import remarkLint from 'remark-lint'
import remarkLintNoUndefinedReferences from 'remark-lint-no-undefined-references'
import {read} from 'to-vfile'

main()

async function main() {
  const file = await remark()
    .use(remarkLint)
  
    // WRONG: This usage seems to suppress the warnings, as desired. However, note the next usage.
    //.use(remarkLintNoUndefinedReferences[ { allow: [ '_TOC_', '[_TOC_]' ] }])

    // WRONG: This usage also seems to supresses the warnings but, it shoud not have done so.
    //.use(remarkLintNoUndefinedReferences[ { allow: [ '...', '…' ] }])

    // WRONG: This usage (and related tests) seem to illustrate that anything in the allowed array suppresses all warnings. 
    //.use(remarkLintNoUndefinedReferences[ { allow: [ '' ] }])

    // GOOD: This usage results in the expected warnings, '...Found reference to undefined definition...'
    //.use(remarkLintNoUndefinedReferences)

    // GOOD: This usage seems to be correct!!
    .use(remarkLintNoUndefinedReferences, [1, { allow: [ '_TOC_', '[_TOC_]' ] }])
    .process(await read('.\Test\Test.md'))

  console.error(reporter(file))
}

执行和输出

C:\..>node Test.js
DEBUG remarkTest: allow contains 2 items.

DEBUG remarkTest Id: '_TOC_'
DEBUG remarkTest Id: '[_TOC_]'
.\Test\Test.md: no issues found

下面的package.json正确"configures" the remark-lint-no-undefined-references plugin/rule "allow" option for use with remark-cli.

package.json

我是通过 2022 年 3 月 30 日的更新并使用 Unified Engine, Configuration, Schema 部分中说明的不同语法来解决这个问题的。

同样,我的目标是 configure the rule to ignore the Azure DevOps Wiki's non-standard table 的内容标签,[[_TOC_]].

{
    "remarkConfig": {
        "plugins": {
            "remark-lint-no-undefined-references": { "allow":[ "_TOC_", "[_TOC_]" ] }
        }
    },
    "dependencies": {
        "remark": "^14.0.2",
        "remark-lint": "^9.1.1",
        "remark-lint-no-undefined-references": "^4.1.1"
    }
}

执行和输出

注意:我的调试 console.log(...) 仍然存在。

C:\..>remark Test
DEBUG remarkCLITest: allow contains 2 items.

Test\Test.md: no issues found