simple_english 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +193 -0
- data/bin/se +6 -0
- data/docs/RULES.md +496 -0
- data/lib/simple_english/annotated_text.rb +117 -0
- data/lib/simple_english/cli.rb +152 -0
- data/lib/simple_english/client.rb +133 -0
- data/lib/simple_english/config.rb +51 -0
- data/lib/simple_english/counts.rb +40 -0
- data/lib/simple_english/engine.rb +31 -0
- data/lib/simple_english/extractor.rb +55 -0
- data/lib/simple_english/finding.rb +8 -0
- data/lib/simple_english/http.rb +76 -0
- data/lib/simple_english/install.rb +75 -0
- data/lib/simple_english/languagetool.rb +143 -0
- data/lib/simple_english/markdown.rb +97 -0
- data/lib/simple_english/paragraph.rb +10 -0
- data/lib/simple_english/plain_text.rb +17 -0
- data/lib/simple_english/result.rb +18 -0
- data/lib/simple_english/segment.rb +11 -0
- data/lib/simple_english/server.rb +196 -0
- data/lib/simple_english/span.rb +8 -0
- data/lib/simple_english/suppressions.rb +37 -0
- data/lib/simple_english.rb +78 -0
- data/rules/simple-english.xml +617 -0
- metadata +168 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Lint Markdown prose with the SimpleEnglish Plain-mode rules.
|
|
4
|
+
# Pattern rules run on LanguageTool. Counting rules run here.
|
|
5
|
+
# This file is the composition root. The pieces live in lib/simple_english/.
|
|
6
|
+
|
|
7
|
+
require_relative "simple_english/finding"
|
|
8
|
+
require_relative "simple_english/markdown"
|
|
9
|
+
require_relative "simple_english/counts"
|
|
10
|
+
require_relative "simple_english/languagetool"
|
|
11
|
+
require_relative "simple_english/install"
|
|
12
|
+
require_relative "simple_english/extractor"
|
|
13
|
+
require_relative "simple_english/annotated_text"
|
|
14
|
+
require_relative "simple_english/suppressions"
|
|
15
|
+
require_relative "simple_english/config"
|
|
16
|
+
require_relative "simple_english/engine"
|
|
17
|
+
require_relative "simple_english/http"
|
|
18
|
+
require_relative "simple_english/client"
|
|
19
|
+
require_relative "simple_english/server"
|
|
20
|
+
|
|
21
|
+
module SimpleEnglish
|
|
22
|
+
VERSION = "0.1.0"
|
|
23
|
+
|
|
24
|
+
module_function
|
|
25
|
+
|
|
26
|
+
# Returns findings, or nil when the daemon is unreachable. The
|
|
27
|
+
# caller (bin/se) owns the exit status. Diagnostics go to
|
|
28
|
+
# stderr here.
|
|
29
|
+
def lint_text(text)
|
|
30
|
+
return nil unless Client.ensure_up(install: Install.from_env)
|
|
31
|
+
Client.lint(text)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# One entry point for files. Markdown keeps the counting rules. Code
|
|
35
|
+
# files lint comments through the daemon. nil means unreachable:
|
|
36
|
+
# the caller decides how fatal that is.
|
|
37
|
+
def lint_file(path, text = File.read(path))
|
|
38
|
+
language = Extractor.language_for(path)
|
|
39
|
+
findings =
|
|
40
|
+
if language
|
|
41
|
+
# Comment-free files never reach the daemon. No boot, no POST.
|
|
42
|
+
return [] if Extractor.comment_spans(text, language).empty?
|
|
43
|
+
return nil unless Client.ensure_up(install: Install.from_env)
|
|
44
|
+
result = Client.lint(text, language: language)
|
|
45
|
+
if result.nil?
|
|
46
|
+
warn "error: se daemon did not answer. Run `se serve` and read its output."
|
|
47
|
+
end
|
|
48
|
+
result
|
|
49
|
+
else
|
|
50
|
+
lint_text(text)
|
|
51
|
+
end
|
|
52
|
+
return nil unless findings
|
|
53
|
+
Suppressions.filter(text, findings)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def corpus_test
|
|
57
|
+
pairs = Dir.glob(File.expand_path("../test/corpus/*-before.md", __dir__))
|
|
58
|
+
.sort
|
|
59
|
+
failed = pairs.flat_map do |before|
|
|
60
|
+
after = before.sub(/-before\.md\z/, "-after.md")
|
|
61
|
+
before_findings = lint_text(File.read(before))
|
|
62
|
+
after_findings = lint_text(File.read(after))
|
|
63
|
+
messages = []
|
|
64
|
+
if before_findings.nil? || after_findings.nil?
|
|
65
|
+
messages << "#{before}: daemon unreachable"
|
|
66
|
+
else
|
|
67
|
+
messages << "#{before}: no findings, the rule set misses this case" if before_findings.empty?
|
|
68
|
+
unless after_findings.empty?
|
|
69
|
+
messages << "#{after}: still flagged: #{after_findings.map(&:rule).join(", ")}"
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
messages
|
|
73
|
+
end
|
|
74
|
+
failed.each { |failure| puts "FAIL #{failure}" }
|
|
75
|
+
puts "corpus: #{pairs.size} pairs, #{failed.size} failures"
|
|
76
|
+
failed.empty?
|
|
77
|
+
end
|
|
78
|
+
end
|