From a3b46581b0d1daff44109da93cf24e18f87a25ad Mon Sep 17 00:00:00 2001 From: "Veronica K. B. Olsen" <1619840+vkbo@users.noreply.github.com> Date: Fri, 12 Feb 2021 20:15:28 +0100 Subject: [PATCH] Make the simple spell checker use a set instead of a list --- nw/core/spellcheck.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/nw/core/spellcheck.py b/nw/core/spellcheck.py index 8b3807fa..caa8156b 100644 --- a/nw/core/spellcheck.py +++ b/nw/core/spellcheck.py @@ -238,7 +238,7 @@ class NWSpellSimple(NWSpellCheck): when no other is available. This method is fairly slow compared to other implementations. """ - WORDS = [] + theWords = set() def __init__(self): NWSpellCheck.__init__(self) @@ -250,17 +250,19 @@ class NWSpellSimple(NWSpellCheck): """Load a dictionary as a list from the app assets folder. """ self.theLang = theLang - self.WORDS = [] + self.theWords = set() dictFile = os.path.join(self.mainConf.dictPath, theLang+".dict") try: with open(dictFile, mode="r", encoding="utf-8") as wordsFile: for theLine in wordsFile: if len(theLine) == 0 or theLine.startswith("#"): continue - self.WORDS.append(theLine.strip().lower()) - logger.debug("Spell check word list for language %s loaded" % theLang) - logger.debug("Word list contains %d words" % len(self.WORDS)) + self.theWords.add(theLine.strip().lower()) + + logger.debug("Spell check dictionary for language %s loaded" % theLang) + logger.debug("Dictionary contains %d words" % len(self.theWords)) self.spellLanguage = theLang + except Exception as e: logger.error("Failed to load spell check word list for language %s" % theLang) logger.error(str(e)) @@ -268,8 +270,7 @@ class NWSpellSimple(NWSpellCheck): self._readProjectDictionary(projectDict) for pWord in self.projDict: - if pWord not in self.WORDS: - self.WORDS.append(pWord) + self.theWords.add(pWord) return @@ -279,7 +280,7 @@ class NWSpellSimple(NWSpellCheck): word by the syntax highlighter. """ theWord = theWord.replace(self.mainConf.fmtApostrophe, "'").lower() - return theWord in self.WORDS + return theWord in self.theWords def suggestWords(self, theWord): """Get suggestions for correct word from difflib, and make sure @@ -292,7 +293,7 @@ class NWSpellSimple(NWSpellCheck): if len(theWord) == 0: return [] - theMatches = difflib.get_close_matches(theWord.lower(), self.WORDS, n=10, cutoff=0.75) + theMatches = difflib.get_close_matches(theWord.lower(), self.theWords, n=10, cutoff=0.75) theOptions = [] for aWord in theMatches: if len(aWord) == 0: @@ -308,8 +309,8 @@ class NWSpellSimple(NWSpellCheck): """Wrapper for the internal project dictionary feature. """ newWord = newWord.strip().lower() - if newWord not in self.WORDS: - self.WORDS.append(newWord) + if newWord not in self.theWords: + self.theWords.add(newWord) NWSpellCheck.addWord(self, newWord) return