3

我切换到Sublime Text 3,但现在我在ST3中编写了一些Haskell,我注意到一些很奇怪的东西,那就是警卫的语法高亮逻辑。Haskell Guards和SublimeText 3

正如你所看到的,当我这样写,它强调以白色为主色调的第一后卫,在白色/红色混合了不同的符号:

Correct guards, incorrect highlighting.

只有当我使用这个错误语法(在参数后面带一个等号)它显示正确。

Incorrect guards, correct highlighting.

有谁知道如何解决这一问题?

+1

这几乎肯定是在Haskell的插件的错误。你最好在他们的[GitHub](https://github.com/SublimeHaskell/SublimeHaskell)页面上发布一个问题,而不是在这里。 (事实上​​,有人可能已经这样做了,所以你可以看看现有的问题。) – 2014-12-05 18:45:12

+0

@TikhonJelvis它实际上是使用默认的Haskell插件,而不是SublimeHaskell,它是第三方插件。 – bheklilr 2014-12-05 18:45:53

+0

@bheklilr:有趣的。它看起来实际上是一个[公开问题](https://github.com/SublimeHaskell/SublimeHaskell/issues/139),但关于警卫的语法突出显示。 – 2014-12-05 18:46:45

回答

4

您可能使用默认的Haskell语法高亮显示。我建议禁用Haskell包并安装SublimeHaskell。它的语法突出显得更好,它将otherwise等事物识别为“内置”(主要是Prelude被认为是内置的功能)。

如果您使用的是内置在Haskell高亮,你可以检查它通过使用按CtrlAlt键P快捷的马车。单独突出显示每个防护管,然后点击此快捷方式。在状态栏中,它将简要显示与该区域相关的语法范围名称。对于第一个管道,您将获得source.haskell meta.function.type-declaration.haskell,第二个管道将获得source.haskell keyword.operator.haskell。使用SublimeHaskell的语法,你会得到source.haskell keyword.operator.haskell这两个管道。我不会说SublimeHaskell的完美(尝试在module Name where之后缩进整个文件),但它绝对更好。由于语法具有相同的名称,并且由于SublimeHaskell附带片段,并且不包含内置的所有内容,所以我建议禁用Haskell插件,并且只允许选择SublimeHaskell的语法。

0

(不确定!!!) 我现在认为这不是一个错误,而是我相信这实际上是ST3告诉你你在这个函数中有非限制性模式的方式。

非exaustive:http://i.imgur.com/74o4sgp.png

Exaustive:http://i.imgur.com/M9a4TTL.png

+0

[你确定](http://i.imgur.com/vOUNnnC.png)? (我不知道为什么我的剪辑在图片的顶部包含了一个白色区域,但我懒得编辑)。 – bheklilr 2014-12-05 19:43:35

+0

@bheklilr我不完全确定,所以如果有人可以证实这将是伟大的。 – llfsa 2014-12-05 19:52:45