改进拼写检查器

但丁·加涅

欢迎访问我们关于VisualStudio17.6预览版2中拼写检查功能的最新博客文章!我们很高兴与您分享我们对此功能所做的最新改进,该功能最初是在针对C#、C++和标记文件的Visual Studio 17.5预览版中引入的。我们从像您这样的开发人员那里收到了大量宝贵的反馈,这有助于在该功能发布到发布渠道之前对其进行塑造和完善。

启用了拼写检查器的Visual Studio编辑器。标识符“DetailChekkForIssues”的字母“Chekk”用蓝色下划线,上下文菜单将“Chekk”重命名为“DetailcheckForIssus”。在屏幕截图的其他地方,字符串包含“http://www.contoso.com网站“,但没有一个被标记为拼写错误,在代码的后面,字符串文字包括像hello\nworld和hello\tworld这样的字符串,这些字符串在查找拼写错误的单词时可以正确处理转义字符。

如果您是拼写检查器功能的新手,请查看我们的早期博客帖子作为介绍。否则,让我们深入了解VisualStudio17.6预览版2中令人兴奋的增强功能!

编程语言专用词典

我们听到的最大反馈是关于假阳性。拼写检查器使用与检测到的口语相同的词典。我们添加了启发式以补偿代码如何使用这些单词,因此HelloWorld之类的构造将进行正确的拼写检查,但开发人员使用的许多单词不是我们口语的一部分。像“guid”或“args”这样的单词通常出现在代码文档中,但拼写检查器会将其标记为拼写错误的单词。

在这次更新中,我们与C++和C#团队合作,添加了专门用于检测这些语言中常用单词的语言的排除词典。这将大大减少误报的数量,尤其是在注释代码片段时。在这篇文章的后面,我们将讨论我们添加到editorconfig中的开关,如果用户想禁用它,它可以控制这种行为。

排除字典编码

许多人遇到的另一个问题是拼写检查器使用的排除字典的编码。Visual Studio将使用拼写排除路径在editorconfig文件或exclusion.dic文件中切换%localappdata%\Microsoft\VisualStudio\<版本>如果找不到交换机,则返回目录。在这两种情况下,拼写检查API都要求排除文件具有“UTF-16 with BOM”编码才能正常工作。我们收到了多份编码被破坏的报告,特别是当用户手动修改这些文件以删除排除的单词时。

通过此更新,我们改进了VisualStudio处理排除文件的方式。UTF-16编码不再是必要的,因此用户应该能够在不遇到编码问题的情况下修改排除字典。

更好的特殊情况处理

我们也感谢那些抓到一些我们没有想到的案件的人。基于此反馈,我们为一些特殊情况添加了其他改进:

  • 包含URL的字符串(例如,“https://。。。“或”邮寄至:。。”.) 不会对整个字符串进行拼写检查。
  • 反斜杠将省略拼写检查中的后续字符。例如“\纳洛“将不再标记为拼写错误,因为'n个'被省略并且'你好'是拼写正确的单词。
  • 不再推荐包含标点符号的建议。例如“杂项。“将不再推荐,因为它可能导致代码无法编译。

自定义拼写检查器

我们添加了拼写_use_default_exclusion_dictionary在此更新中切换到editorconfig。为方便起见,以下是可用选项的完整列表:

spelling_anguages=_language_[,_language _] (例如:=en-us,fr-fr)

  • 这列出了Visual Studio要使用的语言。在本例中,VisualStudio在检查拼写问题时只使用en-us和fr-fr字典。请注意,必须在用户的计算机上安装fr-fr语言包,否则Visual Studio会错误地将任何法语单词标记为拼写错误。

spelling_checkable_types=字符串、标识符、注释 (例如:=标识符、注释)

  • 这将控制Visual Studio应检查的内容。在本例中,VisualStudio将检查标识符和注释中拼写错误的单词,但不会检查字符串内部。

spelling_error_seiverty=错误或警告或信息或提示 (例如:=error)

  • 这控制Visual Studio将为错误列表中的拼写错误指定的严重性。在本例中,拼写错误将显示为错误。

spelling_exclusion_path=排除字典的绝对或相对路径。 (示例:=.\exclusion.dic)

  • 这允许您创建自己的排除词典,以指定您认为拼写正确的单词。排除字典是一个简单的文本文件,可以检入到源代码管理中,其中文件中的每一行都包含一个单词,该单词应该被视为拼写正确的单词。在本例中,首次对解决方案中的任何文件运行拼写检查器时,Visual Studio将在.sln文件所在的目录(对于C#项目)或根目录(对于C++目录)中检查exclusion.dic文件。如果不存在文件,拼写检查器将创建一个文件。然后,每当您选择忽略一个单词时,它都会被添加到这个exclusion.dic文件中。Visual Studio会将此exclusion.dic文件中出现的任何单词视为拼写正确的单词。

spelling_use_default_exclusion_dictionary=真或假 (例如:=spelling_use_default_exclusion_dictionary=false)

  • 这将控制是否使用特定于语言的排除词典。设置为false时,将不使用C++或C#特定排除词典中指定的任何单词。默认值为true。

你的反馈很重要!

我们非常重视用户的反馈,并对收到的积极反应感到兴奋。您的输入直接影响了我们对Visual Studio的改进,我们渴望继续改进产品以满足您的需求。我们前面有一个雄心勃勃的路线图,您的反馈将帮助我们确定工作的优先顺序。让我们继续对话开发者社区,感谢您成为Visual Studio社区的重要组成部分!

13条评论

讨论结束。登录以编辑/删除现有评论。

  • 大卫·隆德斯 0

    可以改进反斜杠检测吗?
    请参见此错误报告.

  • 沙巴兹先生 0

    我研究过拼写检查算法,似乎与音素组或电话匹配比排序加权汉明-距离字母拼写更有效。但是…不管怎样,伙计。

  • 赛义德·阿卜杜勒·莫伊斯·侯赛因 1

    我只是想在VS中增加这个功能。。JetBrains的扩展对于这么小的东西来说太重了。
    感谢您在漫长的时间后收听此节目。

  • 卡斯滕·里德尔 1

    请使用解决方案中的多个项目测试此功能,这些项目在解决方案中甚至可能有多个.editorconfig文件。因为默认的.editorconfig文件在项目级别上可以不同。
    我现在有了解决方案级别的.editorconfig spelling_exclusion_path=。\spellchecker_exclusion.dic和on
    项目级别.editorconfig:spelling_exclusion_path=.\..\。。\拼写检查器排除.dic
    将新项添加到visual studio内的spellchecker_exclusion.dic文件中很好(拼写忽略)。但如果我重新启动解决方案拼写检查器,就不会读取我的排除项。
    也许我在这里做错了什么,更好的描述是合适的。
    我不确定这个预览版是否解决了这个问题,运行17.5.2 atm。

  • 沃特·德·弗里斯 1

    我还没有尝试过新的测试版,但在VS17.5.3中有点过于敏感。它抱怨年份以下代码段中的一部分:

    日期时间。TryParseExact(日期,“dd/MM/yyyy”,区域性,DateTimeStyles.None,out var dt);日期时间。现在。ToString(“日/月/年”);
    • 但丁·加涅Microsoft员工 0

      你说得对,那一个将被触发为拼写错误的单词。目前,这可能只是一个添加到您的排除列表。

  • 瓦茨拉夫·埃利亚斯 1

    这对谁有用吗?这是否意味着在17.5.3中也有效?

    spelling_languages=en-GB
    • 但丁·加涅Microsoft员工 1

      只要你在Windows机器上安装了英语(英国)语言包,这就应该有效。检查Windows上的语言设置,查看首选语言中是否列出了英语(英国)。如果没有,您需要添加它才能工作。

  • 弗兰克·刘 0

    谁在乎我的c#代码是否有一个名为“DoSomthing”而不是“DoSomething”的函数?客户看不到。拼写检查器会检查它。

    但如果我在CSHTML中键入“早上好,我的客户”,客户会看到它。但拼写检查器不会检查它。

    我直接安装了它。

  • 菲利普·格鲁贝尔 1

    我今天试过了,但似乎有问题。我添加了.editorconfig和自定义的“spelling_exclusion_path=..\exclusion.dic”。当我告诉VS忽略一个单词时,它确实会将其添加到.dic文件中并忽略它。但当我重新启动VS时,它会再次标记有问题的单词,直到我告诉它再次忽略它(并且它会在.dic文件内添加一个重复条目)。

    这对其他人有用吗?

    • 雷内·赫克尔 1

      同样的问题

  • 理查德·考克斯 0

    这才刚刚开始出现…。包含SQL的字符串。

    需要一种机制来禁用或切换块或字符串中的代码语言。

    现在噪音太大了,所以必须把它关掉。

反馈usabilla图标