mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[grazie] IJPL-200544 Migrate GrazieSpellCheckerEngine, grazie and hunspell dictionaries to grazie module
Merge-request: IJ-MR-176956 Merged-by: Ilia Permiashkin <ilia.permiashkin@jetbrains.com> GitOrigin-RevId: 58c7d2896724ac1be5e999b22ccf98d5e16a74a4
This commit is contained in:
committed by
intellij-monorepo-bot
parent
230d39a7ca
commit
87f783e802
@@ -157,6 +157,7 @@ jvm_library(
|
||||
"//xml/impl",
|
||||
"//platform/syntax/syntax-scripts:scripts",
|
||||
"@lib//:byte-buddy",
|
||||
"//plugins/grazie/src:core",
|
||||
],
|
||||
exports = [
|
||||
"//plugins/java-i18n",
|
||||
|
||||
@@ -129,5 +129,6 @@
|
||||
<orderEntry type="module" module-name="intellij.xml.impl" scope="TEST" />
|
||||
<orderEntry type="module" module-name="intellij.platform.syntax.scripts" scope="TEST" />
|
||||
<orderEntry type="library" scope="TEST" name="byte-buddy" level="project" />
|
||||
<orderEntry type="module" module-name="intellij.grazie.core" scope="TEST" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -1 +1 @@
|
||||
NegativeArraySizeException negativeArraySizeException;
|
||||
NegativeArraySizeException option;
|
||||
|
||||
@@ -6,18 +6,22 @@ import com.intellij.application.options.CodeStyle;
|
||||
import com.intellij.codeInsight.TargetElementUtil;
|
||||
import com.intellij.codeInsight.template.impl.TemplateManagerImpl;
|
||||
import com.intellij.codeInsight.template.impl.TemplateState;
|
||||
import com.intellij.grazie.spellcheck.suggestion.SpellcheckingNameSuggestionProvider;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.editor.ex.EditorEx;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.pom.java.JavaFeature;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.refactoring.rename.*;
|
||||
import com.intellij.refactoring.rename.inplace.MemberInplaceRenameHandler;
|
||||
import com.intellij.refactoring.rename.naming.AutomaticRenamerFactory;
|
||||
import com.intellij.testFramework.ExtensionTestUtil;
|
||||
import com.intellij.testFramework.IdeaTestUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class RenameFieldTest extends LightRefactoringTestCase {
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
<applicationService serviceImplementation="com.intellij.grazie.GrazieConfig"/>
|
||||
|
||||
<backgroundPostStartupActivity implementation="com.intellij.grazie.ide.notification.GrazieNotificationComponent"/>
|
||||
<postStartupActivity implementation="com.intellij.grazie.spellcheck.engine.GrazieSpellCheckerEngine$SpellerLoadActivity"/>
|
||||
|
||||
<!-- getDisplayName is overridden in GrazieInspection itself! Placeholder is required to suppress validation. -->
|
||||
<localInspection bundle="messages.GrazieBundle" groupKey="grazie.group.name" enabledByDefault="true" shortName="GrazieInspectionRunner"
|
||||
@@ -74,6 +75,9 @@
|
||||
language=""
|
||||
implementationClass="com.intellij.grazie.spellcheck.GrazieSpellCheckingInspection"/>
|
||||
|
||||
<projectService serviceImplementation="com.intellij.grazie.spellcheck.engine.GrazieSpellCheckerEngine"
|
||||
serviceInterface="com.intellij.spellchecker.engine.SpellCheckerEngine"/>
|
||||
|
||||
<applicationConfigurable parentId="editor" instance="com.intellij.grazie.ide.ui.proofreading.ProofreadConfigurable" id="proofread"
|
||||
key="configurable.group.proofread.settings.display.name" bundle="messages.OptionsBundle"/>
|
||||
|
||||
@@ -88,6 +92,7 @@
|
||||
<statistics.notificationIdsHolder implementation="com.intellij.grazie.ide.notification.GrazieNotificationIds"/>
|
||||
|
||||
<spellchecker.dictionary.runtimeDictionaryProvider implementation="com.intellij.grazie.spellcheck.GrazieDictionaryProvider"/>
|
||||
<spellchecker.dictionary.customDictionaryProvider implementation="com.intellij.grazie.spellcheck.hunspell.HunspellDictionaryProvider"/>
|
||||
<notificationGroup id="Proofreading missing languages information" displayType="STICKY_BALLOON" bundle="messages.GrazieBundle"
|
||||
key="grazie.notification.missing-languages.group"/>
|
||||
|
||||
@@ -103,6 +108,7 @@
|
||||
|
||||
<severitiesProvider implementation="com.intellij.grazie.ide.TextProblemSeverities"/>
|
||||
<spellchecker.lifecycle implementation="com.intellij.grazie.spellcheck.GrazieSpellcheckerLifecycle"/>
|
||||
<nameSuggestionProvider id="SpellcheckingSuggestionProvider" implementation="com.intellij.grazie.spellcheck.suggestion.SpellcheckingNameSuggestionProvider" order="first"/>
|
||||
|
||||
<registryKey key="spellchecker.grazie.enabled" defaultValue="true" description="Enables Grazie text-level spellchecking"/>
|
||||
<registryKey key="grazie.skip.precommit.checks"
|
||||
|
||||
@@ -77,6 +77,7 @@ jvm_library(
|
||||
"//platform/util/text-matching",
|
||||
"//libraries/grpc",
|
||||
"//platform/util/jdom",
|
||||
"@lib//:caffeine",
|
||||
],
|
||||
exports = [
|
||||
"@lib//:grazie-core-org-jetbrains-intellij-deps-languagetool-languagetool-core",
|
||||
|
||||
@@ -412,5 +412,6 @@
|
||||
<orderEntry type="module" module-name="intellij.platform.util.text.matching" />
|
||||
<orderEntry type="module" module-name="intellij.libraries.grpc" />
|
||||
<orderEntry type="module" module-name="intellij.platform.util.jdom" />
|
||||
<orderEntry type="library" name="caffeine" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -11,9 +11,9 @@ import com.intellij.grazie.remote.GrazieRemote
|
||||
import com.intellij.grazie.remote.HunspellDescriptor
|
||||
import com.intellij.grazie.remote.LanguageToolDescriptor
|
||||
import com.intellij.grazie.remote.RemoteLangDescriptor
|
||||
import com.intellij.grazie.spellcheck.engine.GrazieSpellCheckerEngine
|
||||
import com.intellij.grazie.spellcheck.hunspell.HunspellDictionary
|
||||
import com.intellij.openapi.util.NlsSafe
|
||||
import com.intellij.spellchecker.grazie.GrazieSpellCheckerEngine
|
||||
import com.intellij.spellchecker.hunspell.HunspellDictionary
|
||||
import org.jetbrains.annotations.NonNls
|
||||
import org.languagetool.Language
|
||||
import org.languagetool.language.English
|
||||
|
||||
+3
-3
@@ -6,6 +6,8 @@ import com.intellij.codeHighlighting.HighlightDisplayLevel;
|
||||
import com.intellij.codeInspection.*;
|
||||
import com.intellij.codeInspection.options.OptPane;
|
||||
import com.intellij.grazie.GrazieConfig;
|
||||
import com.intellij.grazie.spellcheck.diacritic.Diacritics;
|
||||
import com.intellij.grazie.spellcheck.engine.GrazieSpellCheckerEngine;
|
||||
import com.intellij.lang.LanguageNamesValidation;
|
||||
import com.intellij.lang.injection.InjectedLanguageManager;
|
||||
import com.intellij.lang.refactoring.NamesValidator;
|
||||
@@ -20,8 +22,6 @@ import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.refactoring.rename.RenameUtil;
|
||||
import com.intellij.spellchecker.SpellCheckerManager;
|
||||
import com.intellij.spellchecker.SpellCheckerSeveritiesProvider;
|
||||
import com.intellij.spellchecker.grazie.GrazieSpellCheckerEngine;
|
||||
import com.intellij.spellchecker.grazie.diacritic.Diacritics;
|
||||
import com.intellij.spellchecker.inspections.SpellCheckingInspection;
|
||||
import com.intellij.spellchecker.inspections.Splitter;
|
||||
import com.intellij.spellchecker.settings.SpellCheckerSettings;
|
||||
@@ -302,7 +302,7 @@ public final class GrazieSpellCheckingInspection extends SpellCheckingInspection
|
||||
|
||||
List<String> paths = SpellCheckerSettings.getInstance(project).getCustomDictionariesPaths();
|
||||
if (paths != null && !paths.isEmpty()) {
|
||||
GrazieSpellCheckerEngine engine = project.getService(GrazieSpellCheckerEngine.class);
|
||||
GrazieSpellCheckerEngine engine = GrazieSpellCheckerEngine.getInstance(project);
|
||||
return !ContainerUtil.exists(paths, dictionaryName -> engine.isDictionaryLoad(dictionaryName));
|
||||
}
|
||||
return true;
|
||||
|
||||
+2
-2
@@ -11,6 +11,7 @@ import ai.grazie.spell.text.Typo
|
||||
import com.intellij.codeInspection.LocalInspectionToolSession
|
||||
import com.intellij.grazie.GrazieConfig
|
||||
import com.intellij.grazie.ide.inspection.grammar.GrazieInspection.Companion.sortByPriority
|
||||
import com.intellij.grazie.spellcheck.engine.GrazieSpellCheckerEngine
|
||||
import com.intellij.grazie.text.TextContent
|
||||
import com.intellij.grazie.text.TextExtractor
|
||||
import com.intellij.openapi.components.service
|
||||
@@ -21,7 +22,6 @@ import com.intellij.openapi.util.TextRange
|
||||
import com.intellij.openapi.util.getOrCreateUserData
|
||||
import com.intellij.openapi.util.text.StringUtil.BombedCharSequence
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.spellchecker.grazie.GrazieSpellCheckerEngine
|
||||
import com.intellij.spellchecker.inspections.IdentifierSplitter.MINIMAL_TYPO_LENGTH
|
||||
import com.intellij.spellchecker.tokenizer.SpellcheckingStrategy
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
@@ -64,7 +64,7 @@ object GrazieTextLevelSpellCheckingExtension {
|
||||
}
|
||||
|
||||
private fun getTextSpeller(project: Project): TextSpeller? {
|
||||
val speller = project.service<GrazieSpellCheckerEngine>().getSpeller() ?: return null
|
||||
val speller = GrazieSpellCheckerEngine.getInstance(project).getSpeller() ?: return null
|
||||
val enabledLanguages = GrazieConfig.get().enabledLanguages.mapNotNull { it.withVariant }
|
||||
val validPhrasesTexts = ConcurrentHashMap<CharSequence, List<ai.grazie.rules.tree.TextRange>>()
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.spellchecker.grazie.async
|
||||
package com.intellij.grazie.spellcheck.async
|
||||
|
||||
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer
|
||||
import com.intellij.openapi.application.Application
|
||||
+2
-2
@@ -1,7 +1,8 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.spellchecker.grazie.async
|
||||
package com.intellij.grazie.spellcheck.async
|
||||
|
||||
import ai.grazie.spell.lists.WordList
|
||||
import com.intellij.grazie.spellcheck.dictionary.SimpleWordList
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.application.EDT
|
||||
import com.intellij.openapi.diagnostic.debug
|
||||
@@ -10,7 +11,6 @@ import com.intellij.openapi.progress.ProgressManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.startup.StartupManager
|
||||
import com.intellij.spellchecker.dictionary.Loader
|
||||
import com.intellij.spellchecker.grazie.dictionary.SimpleWordList
|
||||
import com.intellij.util.containers.CollectionFactory
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import kotlinx.coroutines.*
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.spellchecker.grazie.diacritic
|
||||
package com.intellij.grazie.spellcheck.diacritic
|
||||
|
||||
import ai.grazie.nlp.utils.normalization.StripAccentsNormalizer
|
||||
import com.intellij.util.io.IOUtil
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
@file:Suppress("ReplacePutWithAssignment")
|
||||
|
||||
package com.intellij.spellchecker.grazie.dictionary
|
||||
package com.intellij.grazie.spellcheck.dictionary
|
||||
|
||||
import ai.grazie.spell.lists.WordList
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.spellchecker.grazie.dictionary
|
||||
package com.intellij.grazie.spellcheck.dictionary
|
||||
|
||||
import ai.grazie.spell.lists.WordList
|
||||
import com.intellij.spellchecker.dictionary.Dictionary
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.spellchecker.grazie.dictionary
|
||||
package com.intellij.grazie.spellcheck.dictionary
|
||||
|
||||
import ai.grazie.spell.lists.WordListWithFrequency
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.spellchecker.grazie.dictionary
|
||||
package com.intellij.grazie.spellcheck.dictionary
|
||||
|
||||
import ai.grazie.nlp.similarity.Levenshtein
|
||||
import ai.grazie.spell.lists.WordList
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.spellchecker.grazie.dictionary
|
||||
package com.intellij.grazie.spellcheck.dictionary
|
||||
|
||||
import ai.grazie.nlp.similarity.Levenshtein
|
||||
import ai.grazie.spell.lists.WordList
|
||||
+21
-10
@@ -1,7 +1,7 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
@file:OptIn(ExperimentalCoroutinesApi::class)
|
||||
|
||||
package com.intellij.spellchecker.grazie
|
||||
package com.intellij.grazie.spellcheck.engine
|
||||
|
||||
import ai.grazie.nlp.langs.Language
|
||||
import ai.grazie.nlp.langs.LanguageISO
|
||||
@@ -16,12 +16,18 @@ import ai.grazie.spell.language.LanguageModel
|
||||
import ai.grazie.spell.suggestion.filter.feature.RadiusSuggestionFilter
|
||||
import ai.grazie.utils.mpp.Resources
|
||||
import com.github.benmanes.caffeine.cache.Caffeine
|
||||
import com.intellij.grazie.spellcheck.async.WordListLoader
|
||||
import com.intellij.grazie.spellcheck.dictionary.ExtendedWordListWithFrequency
|
||||
import com.intellij.grazie.spellcheck.dictionary.WordListAdapter
|
||||
import com.intellij.grazie.spellcheck.hunspell.HunspellDictionary
|
||||
import com.intellij.grazie.spellcheck.ranker.DiacriticSuggestionRanker
|
||||
import com.intellij.openapi.Disposable
|
||||
import com.intellij.openapi.application.ApplicationManager
|
||||
import com.intellij.openapi.application.readAction
|
||||
import com.intellij.openapi.components.Service
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.components.serviceAsync
|
||||
import com.intellij.openapi.extensions.ExtensionNotApplicableException
|
||||
import com.intellij.openapi.extensions.ExtensionPointName
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.startup.ProjectActivity
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
@@ -32,11 +38,7 @@ import com.intellij.spellchecker.dictionary.Loader
|
||||
import com.intellij.spellchecker.engine.SpellCheckerEngine
|
||||
import com.intellij.spellchecker.engine.SpellCheckerEngineListener
|
||||
import com.intellij.spellchecker.engine.Transformation
|
||||
import com.intellij.spellchecker.grazie.async.WordListLoader
|
||||
import com.intellij.spellchecker.grazie.dictionary.ExtendedWordListWithFrequency
|
||||
import com.intellij.spellchecker.grazie.dictionary.WordListAdapter
|
||||
import com.intellij.spellchecker.grazie.ranker.DiacriticSuggestionRanker
|
||||
import com.intellij.spellchecker.hunspell.HunspellDictionary
|
||||
import com.intellij.spellchecker.grazie.SpellcheckerLifecycle
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.cancel
|
||||
@@ -45,14 +47,17 @@ import org.jetbrains.annotations.ApiStatus
|
||||
import org.jetbrains.annotations.TestOnly
|
||||
|
||||
private const val MAX_WORD_LENGTH = 32
|
||||
internal val LIFECYCLE_EP_NAME: ExtensionPointName<SpellcheckerLifecycle> = ExtensionPointName("com.intellij.spellchecker.lifecycle")
|
||||
|
||||
@Service(Service.Level.PROJECT)
|
||||
class GrazieSpellCheckerEngine(
|
||||
project: Project,
|
||||
private val coroutineScope: CoroutineScope,
|
||||
) : SpellCheckerEngine, Disposable {
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun getInstance(project: Project): GrazieSpellCheckerEngine = project.service<SpellCheckerEngine>() as GrazieSpellCheckerEngine
|
||||
|
||||
val enDictionary: HunspellDictionary by lazy {
|
||||
val dic = Resources.text("/dictionary/en.dic")
|
||||
val aff = Resources.text("/dictionary/en.aff")
|
||||
@@ -67,6 +72,7 @@ class GrazieSpellCheckerEngine(
|
||||
|
||||
private val loader = WordListLoader(project, coroutineScope)
|
||||
private val adapter = WordListAdapter()
|
||||
private val replacingRules: Set<RuleDictionary> = getReplacingRules()
|
||||
|
||||
internal class SpellerLoadActivity : ProjectActivity {
|
||||
init {
|
||||
@@ -78,7 +84,7 @@ class GrazieSpellCheckerEngine(
|
||||
}
|
||||
|
||||
override suspend fun execute(project: Project) {
|
||||
project.serviceAsync<GrazieSpellCheckerEngine>().initializeSpeller(project)
|
||||
getInstance(project).initializeSpeller(project)
|
||||
project.serviceAsync<SpellCheckerManager>()
|
||||
|
||||
// heavy classloading to avoid freezes from FJP thread starvation
|
||||
@@ -88,6 +94,12 @@ class GrazieSpellCheckerEngine(
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
if (ApplicationManager.getApplication().isUnitTestMode) {
|
||||
initializeSpeller(project)
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
private val suggestionCache = Caffeine.newBuilder().maximumSize(1024).build<SuggestionRequest, List<String>> { request ->
|
||||
val speller = speller!!
|
||||
@@ -111,7 +123,6 @@ class GrazieSpellCheckerEngine(
|
||||
|
||||
@Volatile
|
||||
private var speller: Speller? = null
|
||||
private val replacingRules: Set<RuleDictionary> = getReplacingRules()
|
||||
|
||||
@ApiStatus.Internal
|
||||
fun initializeSpeller(project: Project) {
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.spellchecker.hunspell
|
||||
package com.intellij.grazie.spellcheck.hunspell
|
||||
|
||||
import ai.grazie.nlp.langs.Language
|
||||
import ai.grazie.nlp.langs.LanguageISO
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.spellchecker.hunspell
|
||||
package com.intellij.grazie.spellcheck.hunspell
|
||||
|
||||
import com.intellij.ide.plugins.PluginManagerCore
|
||||
import com.intellij.openapi.extensions.PluginId
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.spellchecker.grazie.ranker
|
||||
package com.intellij.grazie.spellcheck.ranker
|
||||
|
||||
import ai.grazie.spell.suggestion.ranker.SuggestionRanker
|
||||
import ai.grazie.utils.LinkedSet
|
||||
import com.intellij.spellchecker.grazie.diacritic.Diacritics
|
||||
import com.intellij.grazie.spellcheck.diacritic.Diacritics
|
||||
|
||||
class DiacriticSuggestionRanker(
|
||||
private val fallbackSuggestionRanker: SuggestionRanker,
|
||||
+6
-5
@@ -1,23 +1,24 @@
|
||||
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.spellchecker.quickfixes
|
||||
package com.intellij.grazie.spellcheck.suggestion
|
||||
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.codeInsight.completion.CompletionUtilCore
|
||||
import com.intellij.grazie.spellcheck.engine.GrazieSpellCheckerEngine
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiNamedElement
|
||||
import com.intellij.psi.codeStyle.SuggestedNameInfo
|
||||
import com.intellij.refactoring.rename.NameSuggestionProvider
|
||||
import com.intellij.refactoring.rename.RenameUtil
|
||||
import com.intellij.spellchecker.SpellCheckerManager
|
||||
import com.intellij.spellchecker.grazie.GrazieSpellCheckerEngine
|
||||
|
||||
class SpellcheckingNameSuggestionProvider : NameSuggestionProvider {
|
||||
|
||||
private val suggestionLimit = 3
|
||||
private val minimalWordLength = 4
|
||||
|
||||
override fun getSuggestedNames(element: PsiElement, context: PsiElement?, result: MutableSet<String>): SuggestedNameInfo? {
|
||||
val name = getName(element) ?: return null
|
||||
if (name.contains(CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED) || name.length < minimalWordLength) return null
|
||||
|
||||
val engine = element.project.service<GrazieSpellCheckerEngine>()
|
||||
val engine = GrazieSpellCheckerEngine.getInstance(element.project)
|
||||
val speller = engine.getSpeller() ?: return null
|
||||
if (!speller.isMisspelled(name)) return null
|
||||
|
||||
@@ -3,8 +3,8 @@ package com.intellij.grazie.ide.language
|
||||
|
||||
import com.intellij.grazie.GrazieTestBase
|
||||
import com.intellij.grazie.jlanguage.Lang
|
||||
import com.intellij.grazie.spellcheck.engine.GrazieSpellCheckerEngine
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.spellchecker.grazie.GrazieSpellCheckerEngine
|
||||
import com.intellij.tools.ide.metrics.benchmark.Benchmark
|
||||
|
||||
class JSONSupportTest : GrazieTestBase() {
|
||||
@@ -21,7 +21,7 @@ class JSONSupportTest : GrazieTestBase() {
|
||||
runHighlightTestForFile("ide/language/json/i18n.json")
|
||||
}.setup {
|
||||
psiManager.dropPsiCaches()
|
||||
project.service<GrazieSpellCheckerEngine>().dropSuggestionCache()
|
||||
GrazieSpellCheckerEngine.getInstance(project).dropSuggestionCache()
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,14 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.grazie.ide.language
|
||||
|
||||
import com.intellij.grazie.GrazieConfig
|
||||
import com.intellij.grazie.GrazieTestBase
|
||||
import com.intellij.grazie.jlanguage.Lang
|
||||
import com.intellij.grazie.utils.TextStyleDomain
|
||||
import com.intellij.grazie.spellcheck.engine.GrazieSpellCheckerEngine
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.util.Disposer
|
||||
import com.intellij.spellchecker.ProjectDictionaryLayer
|
||||
import com.intellij.spellchecker.SpellCheckerManager
|
||||
import com.intellij.spellchecker.dictionary.Loader
|
||||
import com.intellij.spellchecker.grazie.GrazieSpellCheckerEngine
|
||||
import com.intellij.spellchecker.settings.SpellCheckerSettings
|
||||
import com.intellij.testFramework.LightProjectDescriptor
|
||||
import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase
|
||||
@@ -212,7 +210,7 @@ class JavaSupportTest : GrazieTestBase() {
|
||||
runHighlightTestForFile("ide/language/java/Dictionary.java")
|
||||
}.setup {
|
||||
psiManager.dropPsiCaches()
|
||||
project.service<GrazieSpellCheckerEngine>().dropSuggestionCache()
|
||||
GrazieSpellCheckerEngine.getInstance(project).dropSuggestionCache()
|
||||
}.start()
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -3,9 +3,9 @@ package com.intellij.grazie.ide.language
|
||||
|
||||
import com.intellij.grazie.GrazieTestBase
|
||||
import com.intellij.grazie.jlanguage.Lang
|
||||
import com.intellij.grazie.spellcheck.engine.GrazieSpellCheckerEngine
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.vfs.encoding.EncodingProjectManager
|
||||
import com.intellij.spellchecker.grazie.GrazieSpellCheckerEngine
|
||||
import com.intellij.tools.ide.metrics.benchmark.Benchmark
|
||||
import java.nio.charset.StandardCharsets
|
||||
|
||||
@@ -56,7 +56,7 @@ class PropertiesSupportTest : GrazieTestBase() {
|
||||
runHighlightTestForFile("ide/language/properties/i18n.properties")
|
||||
}.setup {
|
||||
psiManager.dropPsiCaches()
|
||||
project.service<GrazieSpellCheckerEngine>().dropSuggestionCache()
|
||||
GrazieSpellCheckerEngine.getInstance(project).dropSuggestionCache()
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,10 +3,10 @@ package com.intellij.grazie.ide.language
|
||||
|
||||
import com.intellij.grazie.GrazieTestBase
|
||||
import com.intellij.grazie.jlanguage.Lang
|
||||
import com.intellij.grazie.spellcheck.engine.GrazieSpellCheckerEngine
|
||||
import com.intellij.grazie.text.TextContent
|
||||
import com.intellij.grazie.text.TextExtractor
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.spellchecker.grazie.GrazieSpellCheckerEngine
|
||||
import com.intellij.tools.ide.metrics.benchmark.Benchmark
|
||||
|
||||
class YamlSupportTest : GrazieTestBase() {
|
||||
@@ -27,7 +27,7 @@ class YamlSupportTest : GrazieTestBase() {
|
||||
runHighlightTestForFile("ide/language/yaml/i18n.yaml")
|
||||
}.setup {
|
||||
psiManager.dropPsiCaches()
|
||||
project.service<GrazieSpellCheckerEngine>().dropSuggestionCache()
|
||||
GrazieSpellCheckerEngine.getInstance(project).dropSuggestionCache()
|
||||
}.start()
|
||||
}
|
||||
}
|
||||
|
||||
+1
-3
@@ -8,12 +8,11 @@ import com.intellij.platform.ide.progress.runWithModalProgressBlocking
|
||||
import com.intellij.psi.util.PsiUtilCore
|
||||
import com.intellij.testFramework.common.runAll
|
||||
import com.intellij.testFramework.replaceService
|
||||
import com.intellij.testFramework.utils.vfs.getPsiFile
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import org.jetbrains.kotlin.idea.base.test.IgnoreTests
|
||||
import org.jetbrains.kotlin.idea.base.test.k2FileName
|
||||
import org.jetbrains.kotlin.idea.core.script.k2.configurations.ScriptConfigurationWithSdk
|
||||
import org.jetbrains.kotlin.idea.core.script.k2.configurations.DefaultScriptConfigurationHandler
|
||||
import org.jetbrains.kotlin.idea.core.script.k2.configurations.ScriptConfigurationWithSdk
|
||||
import org.jetbrains.kotlin.idea.core.script.k2.configurations.getConfigurationResolver
|
||||
import org.jetbrains.kotlin.idea.core.script.v1.alwaysVirtualFile
|
||||
import org.jetbrains.kotlin.idea.fir.K2DirectiveBasedActionUtils
|
||||
@@ -24,7 +23,6 @@ import org.jetbrains.kotlin.idea.test.KotlinWithJdkAndRuntimeLightProjectDescrip
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
|
||||
import org.jetbrains.kotlin.scripting.definitions.findScriptDefinition
|
||||
import org.jetbrains.kotlin.test.services.EnvironmentBasedStandardLibrariesPathProvider.getFile
|
||||
import java.io.File
|
||||
import java.nio.file.Path
|
||||
import kotlin.coroutines.EmptyCoroutineContext
|
||||
|
||||
+1
@@ -3,6 +3,7 @@
|
||||
package org.jetbrains.kotlin.idea.refactoring
|
||||
|
||||
import com.intellij.codeInsight.TargetElementUtil
|
||||
import com.intellij.grazie.spellcheck.suggestion.SpellcheckingNameSuggestionProvider
|
||||
import com.intellij.openapi.actionSystem.ex.ActionUtil
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.refactoring.rename.NameSuggestionProvider
|
||||
|
||||
@@ -42,7 +42,6 @@ jvm_library(
|
||||
"//platform/refactoring",
|
||||
"@lib//:guava",
|
||||
"//platform/statistics",
|
||||
"//libraries/ai.grazie.spell.gec.engine.local",
|
||||
"@lib//:spellchecker-java-string-similarity",
|
||||
"//platform/core-ui",
|
||||
"//libraries/lucene.common",
|
||||
@@ -51,7 +50,6 @@ jvm_library(
|
||||
"//platform/util/jdom",
|
||||
"@lib//:kotlin-stdlib",
|
||||
"@lib//:kotlinx-coroutines-core",
|
||||
"@lib//:caffeine",
|
||||
],
|
||||
runtime_deps = ["//platform/backend"]
|
||||
)
|
||||
@@ -79,7 +77,6 @@ jvm_library(
|
||||
"@lib//:guava",
|
||||
"//platform/statistics",
|
||||
"//platform/statistics:statistics_test_lib",
|
||||
"//libraries/ai.grazie.spell.gec.engine.local",
|
||||
"@lib//:spellchecker-java-string-similarity",
|
||||
"//platform/core-ui",
|
||||
"//libraries/lucene.common",
|
||||
@@ -91,7 +88,6 @@ jvm_library(
|
||||
"@lib//:kotlin-test",
|
||||
"@lib//:kotlin-test-junit",
|
||||
"@lib//:kotlinx-coroutines-core",
|
||||
"@lib//:caffeine",
|
||||
"//tools/intellij.tools.ide.metrics.benchmark:ide-metrics-benchmark",
|
||||
"//tools/intellij.tools.ide.metrics.benchmark:ide-metrics-benchmark_test_lib",
|
||||
"//xml/relaxng",
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
<orderEntry type="module" module-name="intellij.platform.refactoring" />
|
||||
<orderEntry type="library" name="Guava" level="project" />
|
||||
<orderEntry type="module" module-name="intellij.platform.statistics" />
|
||||
<orderEntry type="module" module-name="intellij.libraries.ai.grazie.spell.gec.engine.local" />
|
||||
<orderEntry type="module-library">
|
||||
<library name="java-string-similarity" type="repository">
|
||||
<properties include-transitive-deps="false" maven-id="info.debatty:java-string-similarity:2.0.0">
|
||||
@@ -55,7 +54,6 @@
|
||||
<orderEntry type="library" scope="TEST" name="kotlin-test" level="project" />
|
||||
<orderEntry type="library" scope="TEST" name="kotlin-test-junit" level="project" />
|
||||
<orderEntry type="library" name="kotlinx-coroutines-core" level="project" />
|
||||
<orderEntry type="library" name="caffeine" level="project" />
|
||||
<orderEntry type="module" module-name="intellij.tools.ide.metrics.benchmark" scope="TEST" />
|
||||
<orderEntry type="module" module-name="intellij.relaxng" scope="TEST" />
|
||||
</component>
|
||||
|
||||
@@ -25,9 +25,6 @@
|
||||
serviceImplementation="com.intellij.spellchecker.ui.SpellCheckingEditorCustomizationProviderImpl"
|
||||
overrides="true"/>
|
||||
<fileType name="Dictionary" implementationClass="com.intellij.spellchecker.DictionaryFileType" extensions="dic"/>
|
||||
<postStartupActivity implementation="com.intellij.spellchecker.grazie.GrazieSpellCheckerEngine$SpellerLoadActivity"/>
|
||||
|
||||
<nameSuggestionProvider id="SpellcheckingSuggestionProvider" implementation="com.intellij.spellchecker.quickfixes.SpellcheckingNameSuggestionProvider" order="first"/>
|
||||
<severitiesProvider implementation="com.intellij.spellchecker.SpellCheckerSeveritiesProvider"/>
|
||||
|
||||
<spellchecker.support language="TEXT" implementationClass="com.intellij.spellchecker.tokenizer.VmOptionsSpellcheckingStrategy"/>
|
||||
@@ -35,7 +32,6 @@
|
||||
<spellchecker.support language="TEXT" implementationClass="com.intellij.spellchecker.tokenizer.SpellcheckingStrategy"/>
|
||||
|
||||
<spellchecker.bundledDictionaryProvider implementation="com.intellij.spellchecker.DefaultBundledDictionariesProvider"/>
|
||||
<spellchecker.dictionary.customDictionaryProvider implementation="com.intellij.spellchecker.hunspell.HunspellDictionaryProvider"/>
|
||||
<spellchecker.dictionaryLayersProvider implementation="com.intellij.spellchecker.PlatformSettingsDictionaryLayersProvider" order="first"/>
|
||||
|
||||
<registryKey key="spellchecker.corrections.limit" defaultValue="3" description="Spellchecker corrections limit" restartRequired="false"/>
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
package com.intellij.spellchecker
|
||||
|
||||
import ai.grazie.utils.isLowercase
|
||||
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer
|
||||
import com.intellij.ide.SaveAndSyncHandler
|
||||
import com.intellij.openapi.Disposable
|
||||
@@ -34,7 +33,6 @@ import com.intellij.spellchecker.SpellCheckerManager.Companion.restartInspection
|
||||
import com.intellij.spellchecker.dictionary.*
|
||||
import com.intellij.spellchecker.engine.SpellCheckerEngine
|
||||
import com.intellij.spellchecker.engine.SuggestionProvider
|
||||
import com.intellij.spellchecker.grazie.GrazieSpellCheckerEngine
|
||||
import com.intellij.spellchecker.grazie.GrazieSuggestionProvider
|
||||
import com.intellij.spellchecker.settings.SpellCheckerSettings
|
||||
import com.intellij.spellchecker.state.AppDictionaryState
|
||||
@@ -78,10 +76,6 @@ class SpellCheckerManager @Internal constructor(@Internal val project: Project,
|
||||
private var suggestionProvider: SuggestionProvider? = null
|
||||
|
||||
init {
|
||||
if (ApplicationManager.getApplication().isUnitTestMode) {
|
||||
project.service<GrazieSpellCheckerEngine>().initializeSpeller(project)
|
||||
}
|
||||
|
||||
fullConfigurationReload()
|
||||
|
||||
LocalFileSystem.getInstance().addVirtualFileListener(CustomDictFileListener(project = project, manager = this), this)
|
||||
@@ -124,7 +118,7 @@ class SpellCheckerManager @Internal constructor(@Internal val project: Project,
|
||||
}
|
||||
|
||||
fun fullConfigurationReload() {
|
||||
val spellChecker = project.service<GrazieSpellCheckerEngine>()
|
||||
val spellChecker = project.service<SpellCheckerEngine>()
|
||||
this.spellChecker = spellChecker
|
||||
suggestionProvider = GrazieSuggestionProvider(spellChecker)
|
||||
fillEngineDictionary(spellChecker)
|
||||
@@ -262,7 +256,7 @@ class SpellCheckerManager @Internal constructor(@Internal val project: Project,
|
||||
}
|
||||
|
||||
private fun transform(word: String): String? {
|
||||
if (StringUtil.decapitalize(word).isLowercase()) return word
|
||||
if (StringUtil.isLowerCase(StringUtil.decapitalize(word))) return word
|
||||
return spellChecker!!.transformation.transform(word)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.spellchecker.grazie
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName
|
||||
import com.intellij.openapi.project.Project
|
||||
import org.jetbrains.annotations.ApiStatus
|
||||
|
||||
@ApiStatus.Experimental
|
||||
interface SpellcheckerLifecycle {
|
||||
suspend fun preload(project: Project)
|
||||
}
|
||||
|
||||
internal val LIFECYCLE_EP_NAME: ExtensionPointName<SpellcheckerLifecycle> = ExtensionPointName("com.intellij.spellchecker.lifecycle")
|
||||
}
|
||||
@@ -27,8 +27,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class RenameTo extends IntentionAndQuickFixAction implements Iconable, EventTrackingIntentionAction {
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ import java.util.function.Supplier
|
||||
|
||||
private const val BUNDLE: @NonNls String = "messages.SpellCheckerBundle"
|
||||
|
||||
internal object SpellCheckerBundle : DynamicBundle(BUNDLE) {
|
||||
object SpellCheckerBundle : DynamicBundle(BUNDLE) {
|
||||
@JvmStatic
|
||||
fun message(key: @PropertyKey(resourceBundle = BUNDLE) String, vararg params: Any): @Nls String {
|
||||
return getMessage(key, *params)
|
||||
|
||||
Reference in New Issue
Block a user