保守型交互式源代码拼写检查器。
项目描述
scspell 是一个源代码拼写检查器。这是一个非官方的分支(基于 https://launchpad.net/scspell),它可以在 Python 2 和 3 上运行。
scspell 并不试图特别聪明——它只是做了能做的最简单的事情
所有的字母数字字符串(由字母、数字和下划线组成的字符串)都是拼写检查的标记。
每个标记被分成一个或多个子标记。下划线和数字总是分隔标记,大写字母将开始新的子标记。换句话说,some_variable 和 someVariable 都会生成子标记列表 {some, variable}。
所有长度超过三个字符的子标记都将与一组词典进行匹配,如果匹配失败,则提示用户操作。当与包含的英文词典进行匹配时,使用 前缀匹配;这种选择允许使用截断的单词,如 dict 作为有效的子标记。
当应用于大多数流行的编程语言编写的代码,并使用典型的命名约定时,此算法通常会捕获许多错误,同时错误率不会很令人烦恼。
为了捕获更多的拼写错误,scspell 能够针对每个文件与一组特定于该文件的词典单词进行匹配。对于任何给定的文件,可以搜索多达三个不同的子词典
自然语言词典。(默认情况下,scspell 提供美国英语词典。)
特定编程语言的词典,旨在包含该语言特有的拼写不规则的关键词和API。(scspell 为多种流行的编程语言提供小的默认词典。)
特定文件词典,旨在包含不太可能出现在多个独特文件中的不寻常字符串。
用法
要开始拼写检查,运行
$ scspell source_file1 source_file2 ...
对于每次拼写检查失败,您将看到如下类似的输出
filename.c:27: Unmatched 'someMispeldVaraible' -> {mispeld, varaible}
换句话说,标记“someMispeldVaraible”出现在 filename.c 的第27行,它包含子标记“mispeld”和“varaible”,这两个都未通过拼写检查算法。您将提示采取的操作
- (i)忽略
跳到下一个不匹配的标记,不采取任何操作。
- (I)忽略所有
在本次拼写检查会话的剩余时间中,每次遇到此标记时都跳过。
- (r)eplace
输入一些文本作为替换此标记的文本,并仅在此处替换文件中的标记。
- (R)eplace all
输入一些文本作为替换此标记的文本,并替换直到当前文件末尾的每个标记出现。
- (a)dd to dictionary
将一个或多个标记添加到一个词典中(见下文)。
- 显示 (c)ontext
打印出一些与不匹配标记相关的上下文行。
如果您意外选择了替换操作,请输入空字符串以取消。
如果您选择了 (a)dd to dictionary 选项,那么对于每个子标记您将会有以下选项提示
- (b)ack
返回上一菜单,不采取任何操作。
- (i)忽略
跳到下一个子标记,不采取任何操作。
- 添加到 (p)rogramming language dictionary
将此子标记添加到与当前文件编程语言相关的词典中。scspell 使用文件扩展名来确定语言,因此您只会为具有扩展名的文件看到此选项。
- 添加到 (f)ile-specific dictionary
将此子标记添加到与当前文件相关的词典中。您只会为具有此类嵌入式ID或文件ID映射中条目的文件看到此选项。有关详细信息,请参阅 创建文件ID。
- 添加到 (N)ew file-specific dictionary
为当前文件创建新的文件ID,记录新文件ID到文件ID映射中,并将此子标记添加到与该文件ID相关的新文件特定词典中。您只会为既没有嵌入式ID也没有文件ID映射条目的文件以及提供了 --relative-to 选项的情况看到此选项。有关详细信息,请参阅 创建文件ID。
- 添加到 (n)atural language dictionary
将此子标记添加到自然语言词典中。
如果 scspell 没有找到未知标记,则退出状态为0。如果有未知标记,则退出状态为1。如果由于处理过的信号(例如,来自 ^C 的 SIGINT)而终止,则退出状态为2。
拼写检查选项
- –report-only
此选项会导致 scspell 将其认为有错误的子令牌的报告输出到标准错误,而不是提供上述描述的交互式菜单。对于每个子令牌,报告将包括文件名、行号和完整令牌。如果发现任何错误,scspell 将以退出码 1 退出,如果运行无错误,则退出码为 0。
报告错误的格式与交互模式不同。使用 --report-only,上述报告将如下所示
filename.c:27: 'mispeld', 'varaible' were not found in the dictionary (from token 'someMispeldVaraible')
- –no-c-escapes
默认情况下,scspell 会将文件视为包含 C 风格的字符转义。也就是说,给定 printf("Hello\nworld."),它将考虑令牌“hello”和“world”,而不是“nworld”。
使用 --no-c-escapes 选项会导致 scspell 不将 \ 视为特殊字符,例如在 LaTeX 文件中可能写入 \Alpha\beta\gamma\delta。如果不使用此选项,scspell 将会看到令牌“lpha”、“eta”、“amma”和“elta”。
创建文件 ID
如果您希望 scspell 能够唯一标识一个文件,从而创建特定于文件的词典,那么 scspell 必须能够找到文件 ID 来标识文件和特定于文件的词典。有两种方法可以让 scspell 找到文件 ID
文件 ID 可以直接嵌入到文件中,使用以下形式的字符串
scspell-id: <unique ID>
文件 ID 映射文件中的一个条目将文件名与文件 ID 相关联。
唯一的 ID 必须仅由字母、数字、下划线和破折号组成。scspell 可以使用 --gen-id 选项生成合适的唯一 ID 字符串
$ scspell --gen-id scspell-id: e497803c-523a-11de-ae42-0017f2ee0f37
(您可能希望将文件的唯一 ID 放置在源代码注释中。)
在交互式使用过程中,(a)dd to dictionary -> add to (N)ew file-specific dictionary 选项将为当前文件创建一个新的文件 ID,并将其添加到文件 ID 映射文件中。
- –relative-to RELATIVE_TO
文件 ID 映射中存储的文件名是相对路径。此选项指定它们相对于什么。如果没有指定此选项,则不会咨询文件 ID 映射,并且不会提供 add to (N)ew file-specific dictionary 选项。
管理文件 ID
这些选项指导 scspell 操作文件 ID 映射。(这些都可以通过手动编辑文件 ID 映射来完成)。它们对文件中嵌入的文件 ID 没有影响。
- –rename-file FROM_FILE TO_FILE
更改文件 ID 映射中映射的文件名。在重命名具有特定于文件词典和文件 ID 映射条目的文件后,可以使用此选项使条目“跟随”文件。
- –delete-files
从文件 ID 映射中删除文件名。如果是给定文件 ID 的唯一文件名,则从映射中删除文件 ID,并从词典中删除其词表。
- –merge-file-ids FROM_ID TO_ID
合并两个文件 ID 引用的特定于文件的词典。FROM_ID 列表中的所有单词都移动到 TO_ID 列表中。FROM_ID 文件 ID 从映射中删除,并更改使用它的任何文件以使用 TO_ID。FROM_ID 或 TO_ID 可以作为文件名给出,在这种情况下,该文件的文件 ID 用于该参数。
安装
通过 pip 安装 scspell
$ pip install scspell3k
或者,下载并解压缩源代码存档,切换到存档根目录,然后运行安装脚本
$ python setup.py install
在类 UNIX 系统上,如果您要将安装到需要 root 特权的目录,您可能需要使用 sudo
$ sudo python setup.py install
许可证
scspell 是自由软件,根据 GNU 通用公共许可证的版本 2 许可;有关详细信息,请参阅 COPYING.txt
与 scspell 一起分发的英语字典源自 SCOWL 单词列表 。有关该字典适用的各种许可证,请参阅 SCOWL-LICENSE.txt
项目详细信息
scspell3k-2.2.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c7ee9dd5f9707d08885259246e20cf6bc73a1ac7876713ab7d1d3ce8cc6dcd09 |
|
MD5 | 57caf2c8144257f0facf4563ee08ef06 |
|
BLAKE2b-256 | 1f7cbcfe50bfdf0180363f3388d68820a58d84efee58d632366586c6dad7737c |