gpt4 book ai didi

javascript - 解析 ES6 标记模板中的内容时如何报告错误?

转载 作者:行者123 更新时间:2023-12-03 03:22:10 25 4
gpt4 key购买 nike

我正在和一个 friend 一起进行一个小型的 Javascript 实验,其中涉及一个基本的 HTML 解析器,作为一个简单的状态机实现 - 你可以 see the code here .

我的问题是关于涉及任何类型解析器的标记模板函数,以及错误报告 - 也就是说,如果解析器检测到无效状态,它需要报告在输入中发现错误的位置。

我的问题是以一种有意义的方式跟踪和/或解释发现错误的位置。

标记模板函数的输入实际上是源代码位(在我的例子中是 HTML)与 Javascript 值交替,所以你不能简单地(就像我现在所做的那样,就像你在大多数普通解析器中所做的那样)计数字符并报告位置,因为交替的 Javascript 值可能不是字符串,或者可能是不被解析为文字源的字符串。

有没有办法让标记的模板函数发现交替输入字符串/值的源文件位置?

或者我怀疑这种运行时设施实际上是不可能的,这是否正确?除了使用 Javascript 解析器(可能提前)来发现和记录源位置之外,实际上没有任何有用的方法来实现这一点吗?

最佳答案

这里所能做的就是输出问题发生的预期上下文。考虑到问题是由三个引起的:

const three = null;
`one${two}${three}four`

标签函数参数可以在错误消息中连接到它们开始有意义的点,例如

Expected a number as an expression at position 2, got `null`,
`one${...}${...}four`
^^^

如果需要,还可以使用 new Error().stack 检索堆栈跟踪。

如果需要更高的精度,则应使用模板引擎而不是模板文字,因为在模板编译期间所有必要的数据都可用。

标签功能的选项与任何其他功能相同。如果使用 bar 变量作为等于 1 的参数来调用 foo 函数(如 foo(bar)),可能无法确定它是从 foo 内部用 bar 调用的,因为我们得到的只是 1 值。事实上,它像 foo(bar) 那样被调用,只有当我们有堆栈跟踪对源文件的访问权限时才能发现 - 这在正常情况下是没有的情况。此方法可用于需要提供上下文反馈的情况,例如测试运行程序 - 因为它负责脚本加载并可以访问源文件。

关于javascript - 解析 ES6 标记模板中的内容时如何报告错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46521414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com