mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 06:50:54 +07:00
IJ-CR-151119 [dotenv] add missing commits
- migrate to Symbols API - add new logo Co-authored-by: adelf <adel.faiz@gmail.com> (cherry picked from commit 38df2c3c89446bb5c3ff2901280245b718225fe9) GitOrigin-RevId: e2ea805b4f88e9d791bb54f7570c51cf1029c67d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
1d8ca26477
commit
36d3d826a1
3
plugins/env-files-support/.gitignore
vendored
3
plugins/env-files-support/.gitignore
vendored
@@ -8,4 +8,5 @@
|
||||
/.gradle/
|
||||
/*.iml
|
||||
/*.ipr
|
||||
/*.iws
|
||||
/*.iws
|
||||
/.intellijPlatform
|
||||
|
||||
@@ -1,17 +1,21 @@
|
||||
import org.jetbrains.intellij.platform.gradle.TestFrameworkType
|
||||
|
||||
plugins {
|
||||
id("org.jetbrains.intellij") version "1.14.0"
|
||||
id("org.jetbrains.intellij.platform") version "2.0.1"
|
||||
}
|
||||
|
||||
group = "ru.adelf"
|
||||
version = "2023.2"
|
||||
version = "2024.2.1"
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
intellijPlatform {
|
||||
defaultRepositories()
|
||||
}
|
||||
}
|
||||
|
||||
apply {
|
||||
plugin("idea")
|
||||
plugin("org.jetbrains.intellij")
|
||||
plugin("java")
|
||||
}
|
||||
|
||||
@@ -31,38 +35,54 @@ sourceSets {
|
||||
}
|
||||
}
|
||||
|
||||
intellij {
|
||||
version.set("IU-223.8617.56")
|
||||
plugins.set(
|
||||
listOf(
|
||||
"com.jetbrains.php:223.8617.59",
|
||||
"yaml",
|
||||
"org.jetbrains.plugins.go:223.8617.56",
|
||||
"Docker",
|
||||
"pythonid:223.8617.56",
|
||||
"org.jetbrains.plugins.ruby:223.8617.56",
|
||||
"Kotlin",
|
||||
"java-i18n",
|
||||
"properties",
|
||||
"java"
|
||||
)
|
||||
)
|
||||
pluginName.set(".env files support")
|
||||
dependencies {
|
||||
intellijPlatform {
|
||||
create("IU", "2023.2.4", useInstaller = true)
|
||||
|
||||
plugin("com.jetbrains.php", "232.8660.153")
|
||||
plugin("org.jetbrains.plugins.go", "232.8660.48")
|
||||
plugin("org.jetbrains.plugins.ruby", "232.8660.142")
|
||||
plugin("PythonCore", "232.8660.142")
|
||||
|
||||
bundledPlugin("org.jetbrains.kotlin")
|
||||
bundledPlugin("com.intellij.java")
|
||||
bundledPlugin("Docker")
|
||||
bundledPlugin("org.jetbrains.plugins.yaml")
|
||||
|
||||
pluginVerifier()
|
||||
instrumentationTools()
|
||||
testFramework(TestFrameworkType.Platform)
|
||||
}
|
||||
|
||||
testImplementation("junit:junit:4.13.2")
|
||||
testImplementation("org.opentest4j:opentest4j:1.3.0")
|
||||
|
||||
testRuntimeOnly("com.fasterxml.jackson.core:jackson-databind:2.14.1")
|
||||
}
|
||||
|
||||
intellijPlatform {
|
||||
pluginConfiguration {
|
||||
name = ".env files support"
|
||||
|
||||
ideaVersion {
|
||||
sinceBuild = "232"
|
||||
untilBuild = "242.*"
|
||||
}
|
||||
}
|
||||
|
||||
pluginVerification {
|
||||
ides {
|
||||
ide("IU", "2023.2.4")
|
||||
}
|
||||
|
||||
freeArgs = listOf("-mute", "TemplateWordInPluginName")
|
||||
}
|
||||
}
|
||||
|
||||
tasks {
|
||||
patchPluginXml {
|
||||
sinceBuild.set("223")
|
||||
untilBuild.set("232.*")
|
||||
}
|
||||
|
||||
buildSearchableOptions {
|
||||
enabled = false
|
||||
}
|
||||
|
||||
runPluginVerifier {
|
||||
ideVersions.set(listOf("IU-223.4884.69"))
|
||||
}
|
||||
}
|
||||
|
||||
tasks.withType<ProcessResources> {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
// This is a generated file. Not intended for manual editing.
|
||||
package ru.adelf.idea.dotenv.psi;
|
||||
|
||||
import java.util.List;
|
||||
import org.jetbrains.annotations.*;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.model.psi.PsiExternalReferenceHost;
|
||||
|
||||
public interface DotEnvKey extends PsiElement {
|
||||
public interface DotEnvKey extends PsiExternalReferenceHost {
|
||||
|
||||
}
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
// This is a generated file. Not intended for manual editing.
|
||||
package ru.adelf.idea.dotenv.psi;
|
||||
|
||||
import org.jetbrains.annotations.*;
|
||||
import com.intellij.psi.PsiElementVisitor;
|
||||
import com.intellij.model.psi.PsiExternalReferenceHost;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiElementVisitor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class DotEnvVisitor extends PsiElementVisitor {
|
||||
|
||||
public void visitKey(@NotNull DotEnvKey o) {
|
||||
visitPsiElement(o);
|
||||
visitPsiExternalReferenceHost(o);
|
||||
}
|
||||
|
||||
public void visitProperty(@NotNull DotEnvProperty o) {
|
||||
@@ -19,6 +20,10 @@ public class DotEnvVisitor extends PsiElementVisitor {
|
||||
visitPsiElement(o);
|
||||
}
|
||||
|
||||
public void visitPsiExternalReferenceHost(@NotNull PsiExternalReferenceHost o) {
|
||||
visitElement(o);
|
||||
}
|
||||
|
||||
public void visitNamedElement(@NotNull DotEnvNamedElement o) {
|
||||
visitPsiElement(o);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package ru.adelf.idea.dotenv;
|
||||
|
||||
import com.intellij.openapi.util.IconLoader;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public class DotEnvIcons {
|
||||
public static final Icon icon = IconLoader.getIcon("/icons/env.png", DotEnvIcons.class);
|
||||
}
|
||||
@@ -87,7 +87,7 @@ public class EnvironmentVariablesApi {
|
||||
return true;
|
||||
}
|
||||
|
||||
for (EnvironmentVariablesProvider provider : EnvironmentVariablesProviderUtil.PROVIDERS) {
|
||||
for (EnvironmentVariablesProvider provider : EnvironmentVariablesProviderUtil.getEnvVariablesProviders()) {
|
||||
FileAcceptResult fileAcceptResult = provider.acceptFile(virtualFile);
|
||||
if (!fileAcceptResult.isAccepted()) {
|
||||
continue;
|
||||
@@ -99,7 +99,7 @@ public class EnvironmentVariablesApi {
|
||||
return true;
|
||||
}, GlobalSearchScope.allScope(project));
|
||||
|
||||
return (targets.size() > 0 ? targets : secondaryTargets).toArray(PsiElement.EMPTY_ARRAY);
|
||||
return (!targets.isEmpty() ? targets : secondaryTargets).toArray(PsiElement.EMPTY_ARRAY);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -114,7 +114,7 @@ public class EnvironmentVariablesApi {
|
||||
PsiSearchHelper searchHelper = PsiSearchHelper.getInstance(project);
|
||||
|
||||
Processor<PsiFile> psiFileProcessor = psiFile -> {
|
||||
for (EnvironmentVariablesUsagesProvider provider : EnvironmentVariablesProviderUtil.USAGES_PROVIDERS) {
|
||||
for (EnvironmentVariablesUsagesProvider provider : EnvironmentVariablesProviderUtil.getEnvVariablesUsagesProviders()) {
|
||||
targets.addAll(EnvironmentVariablesUtil.getUsagesElementsByKey(key, provider.getUsages(psiFile)));
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ public class EnvironmentVariablesApi {
|
||||
}
|
||||
|
||||
private static FileAcceptResult getFileAcceptResult(VirtualFile virtualFile) {
|
||||
for (EnvironmentVariablesProvider provider : EnvironmentVariablesProviderUtil.PROVIDERS) {
|
||||
for (EnvironmentVariablesProvider provider : EnvironmentVariablesProviderUtil.getEnvVariablesProviders()) {
|
||||
FileAcceptResult fileAcceptResult = provider.acceptFile(virtualFile);
|
||||
if (!fileAcceptResult.isAccepted()) {
|
||||
continue;
|
||||
|
||||
@@ -6,7 +6,6 @@ import com.intellij.codeInsight.completion.PrioritizedLookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.codeInsight.navigation.actions.GotoDeclarationHandler;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import ru.adelf.idea.dotenv.api.EnvironmentVariablesApi;
|
||||
|
||||
@@ -19,7 +18,7 @@ abstract public class BaseEnvCompletionProvider extends CompletionContributor im
|
||||
LookupElementBuilder lockup = LookupElementBuilder.create(entry.getKey())
|
||||
.withCaseSensitivity(false);
|
||||
|
||||
if (StringUtils.isNotEmpty(entry.getValue())) {
|
||||
if (!entry.getValue().isEmpty()) {
|
||||
lockup = lockup.withTailText(" = " + entry.getValue(), true);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ package ru.adelf.idea.dotenv.docker;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiRecursiveElementVisitor;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.yaml.psi.*;
|
||||
import ru.adelf.idea.dotenv.models.EnvironmentKeyValue;
|
||||
@@ -36,7 +35,7 @@ class DockerComposeYamlPsiElementsVisitor extends PsiRecursiveElementVisitor {
|
||||
if (el instanceof YAMLScalar) {
|
||||
EnvironmentKeyValue keyValue = EnvironmentVariablesUtil.getKeyValueFromString(((YAMLScalar) el).getTextValue());
|
||||
|
||||
if (StringUtils.isNotBlank(keyValue.getKey())) {
|
||||
if (!keyValue.getKey().isBlank()) {
|
||||
collectedItems.add(new KeyValuePsiElement(keyValue.getKey(), keyValue.getValue(), el));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package ru.adelf.idea.dotenv.docker;
|
||||
import com.intellij.docker.dockerFile.parser.psi.DockerFileEnvRegularDeclaration;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiRecursiveElementVisitor;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import ru.adelf.idea.dotenv.models.KeyValuePsiElement;
|
||||
|
||||
@@ -23,11 +22,11 @@ class DockerfilePsiElementsVisitor extends PsiRecursiveElementVisitor {
|
||||
}
|
||||
|
||||
private void visitProperty(DockerFileEnvRegularDeclaration envRegularDeclaration) {
|
||||
if (StringUtils.isNotBlank(envRegularDeclaration.getDeclaredName().getText()) && envRegularDeclaration.getRegularValue() != null) {
|
||||
collectedItems.add(new KeyValuePsiElement(
|
||||
envRegularDeclaration.getDeclaredName().getText(),
|
||||
envRegularDeclaration.getRegularValue().getText(),
|
||||
envRegularDeclaration));
|
||||
var key = envRegularDeclaration.getDeclaredName().getText();
|
||||
var valueElement = envRegularDeclaration.getRegularValue();
|
||||
|
||||
if (key != null && !key.isBlank() && valueElement != null) {
|
||||
collectedItems.add(new KeyValuePsiElement(key, valueElement.getText(), envRegularDeclaration));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
package ru.adelf.idea.dotenv.extension;
|
||||
|
||||
import com.intellij.codeInsight.navigation.actions.GotoDeclarationHandler;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import ru.adelf.idea.dotenv.api.EnvironmentVariablesApi;
|
||||
import ru.adelf.idea.dotenv.psi.DotEnvKey;
|
||||
|
||||
public class DotEnvKeyGotoHandler implements GotoDeclarationHandler {
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public PsiElement[] getGotoDeclarationTargets(@Nullable PsiElement psiElement, int i, Editor editor) {
|
||||
if(psiElement == null || psiElement.getParent() == null) {
|
||||
return PsiElement.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
psiElement = psiElement.getParent();
|
||||
|
||||
if(!(psiElement instanceof DotEnvKey)) {
|
||||
return PsiElement.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
return EnvironmentVariablesApi.getKeyUsages(psiElement.getProject(), psiElement.getText());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getActionText(@NotNull DataContext dataContext) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -14,9 +14,7 @@ import ru.adelf.idea.dotenv.psi.DotEnvValue;
|
||||
|
||||
public class DotEnvValuesHiding extends FoldingBuilderEx implements DumbAware {
|
||||
@Override
|
||||
public FoldingDescriptor @NotNull [] buildFoldRegions(@NotNull PsiElement root,
|
||||
@NotNull Document document,
|
||||
boolean quick) {
|
||||
public FoldingDescriptor [] buildFoldRegions(@NotNull PsiElement root, @NotNull Document document, boolean quick) {
|
||||
if (!DotEnvSettings.getInstance().hideValuesInTheFile) return emptyResult;
|
||||
|
||||
return PsiTreeUtil.collectElementsOfType(root, DotEnvValue.class).stream().map(
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package ru.adelf.idea.dotenv.extension.symbols;
|
||||
|
||||
import com.intellij.model.Symbol;
|
||||
import com.intellij.model.psi.PsiSymbolReference;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import ru.adelf.idea.dotenv.api.EnvironmentVariablesApi;
|
||||
import ru.adelf.idea.dotenv.psi.DotEnvKey;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
class DotEnvKeyUsageReference implements PsiSymbolReference {
|
||||
private final DotEnvKey keyElement;
|
||||
|
||||
DotEnvKeyUsageReference(DotEnvKey keyElement) {
|
||||
this.keyElement = keyElement;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull PsiElement getElement() {
|
||||
return keyElement;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TextRange getRangeInElement() {
|
||||
return new TextRange(0, keyElement.getTextLength());
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Collection<? extends Symbol> resolveReference() {
|
||||
return Arrays.stream(EnvironmentVariablesApi.getKeyUsages(keyElement.getProject(), keyElement.getText()))
|
||||
.map(DotEnvKeyUsageSymbol::new)
|
||||
.toList();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package ru.adelf.idea.dotenv.extension.symbols;
|
||||
|
||||
import com.intellij.model.Pointer;
|
||||
import com.intellij.navigation.NavigatableSymbol;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Iconable;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.platform.backend.navigation.NavigationRequest;
|
||||
import com.intellij.platform.backend.navigation.NavigationTarget;
|
||||
import com.intellij.platform.backend.presentation.TargetPresentation;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import ru.adelf.idea.dotenv.DotEnvIcons;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
class DotEnvKeyUsageSymbol implements Pointer<DotEnvKeyUsageSymbol>, NavigatableSymbol, NavigationTarget {
|
||||
private final PsiElement psiElement;
|
||||
|
||||
DotEnvKeyUsageSymbol(PsiElement psiElement) {
|
||||
this.psiElement = psiElement;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable DotEnvKeyUsageSymbol dereference() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Collection<? extends NavigationTarget> getNavigationTargets(@NotNull Project project) {
|
||||
return List.of();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Pointer<DotEnvKeyUsageSymbol> createPointer() {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull TargetPresentation computePresentation() {
|
||||
PsiFile psiFile = psiElement.getContainingFile();
|
||||
|
||||
if (psiFile == null) {
|
||||
return TargetPresentation.builder(psiElement.getText())
|
||||
.presentation();
|
||||
}
|
||||
|
||||
int lineNumber = getLineNumber(psiElement, psiFile);
|
||||
|
||||
String filePath = getFilePath(psiFile);
|
||||
|
||||
if (filePath == null) {
|
||||
filePath = psiFile.getName();
|
||||
}
|
||||
|
||||
String locationString;
|
||||
if (lineNumber == -1) {
|
||||
locationString = filePath;
|
||||
} else {
|
||||
locationString = filePath + ":" + lineNumber;
|
||||
}
|
||||
|
||||
return TargetPresentation.builder(psiElement.getText())
|
||||
.locationText(locationString, psiFile.getIcon(Iconable.ICON_FLAG_VISIBILITY))
|
||||
.icon(DotEnvIcons.icon)
|
||||
.presentation();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable NavigationRequest navigationRequest() {
|
||||
return NavigationRequest.sourceNavigationRequest(psiElement.getContainingFile(), psiElement.getTextRange());
|
||||
}
|
||||
|
||||
private int getLineNumber(@NotNull PsiElement psiElement, @NotNull PsiFile psiFile) {
|
||||
Document document = psiFile.getViewProvider().getDocument();
|
||||
|
||||
if (document == null) return -1;
|
||||
|
||||
return document.getLineNumber(psiElement.getTextOffset()) + 1;
|
||||
}
|
||||
|
||||
private @Nullable String getFilePath(@NotNull PsiFile psiFile) {
|
||||
String basePath = psiFile.getProject().getBasePath();
|
||||
|
||||
if (basePath == null) return null;
|
||||
|
||||
VirtualFile virtualFile = psiFile.getVirtualFile();
|
||||
|
||||
if (virtualFile == null) return null;
|
||||
|
||||
String filePath = virtualFile.getPath();
|
||||
|
||||
if (filePath.startsWith(basePath)) {
|
||||
return filePath.substring(basePath.length());
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package ru.adelf.idea.dotenv.extension.symbols;
|
||||
|
||||
import com.intellij.model.Symbol;
|
||||
import com.intellij.model.psi.PsiExternalReferenceHost;
|
||||
import com.intellij.model.psi.PsiSymbolReference;
|
||||
import com.intellij.model.psi.PsiSymbolReferenceHints;
|
||||
import com.intellij.model.psi.PsiSymbolReferenceProvider;
|
||||
import com.intellij.model.search.SearchRequest;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import ru.adelf.idea.dotenv.psi.DotEnvKey;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@SuppressWarnings("UnstableApiUsage")
|
||||
public class DotEnvSymbolReferenceProvider implements PsiSymbolReferenceProvider {
|
||||
@Override
|
||||
public @NotNull Collection<? extends PsiSymbolReference> getReferences(@NotNull PsiExternalReferenceHost keyElement,
|
||||
@NotNull PsiSymbolReferenceHints psiSymbolReferenceHints) {
|
||||
if (!(keyElement instanceof DotEnvKey)) return List.of();
|
||||
|
||||
return List.of(new DotEnvKeyUsageReference((DotEnvKey) keyElement));
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Collection<? extends SearchRequest> getSearchRequests(@NotNull Project project, @NotNull Symbol symbol) {
|
||||
return List.of();
|
||||
}
|
||||
}
|
||||
@@ -19,9 +19,9 @@ dotEnvFile ::= item_*
|
||||
|
||||
private item_ ::= (EXPORT? property|COMMENT|CRLF)
|
||||
|
||||
key ::= KEY_CHARS
|
||||
key ::= KEY_CHARS {implements="com.intellij.model.psi.PsiExternalReferenceHost"}
|
||||
|
||||
value ::= VALUE_CHARS+ | QUOTE VALUE_CHARS* QUOTE?
|
||||
|
||||
property ::= (key SEPARATOR value? COMMENT?) | key COMMENT? {mixin="ru.adelf.idea.dotenv.psi.DotEnvNamedElementImpl"
|
||||
implements="ru.adelf.idea.dotenv.psi.DotEnvNamedElement" methods=[getKeyText getValueText getName setName getNameIdentifier]}
|
||||
implements="ru.adelf.idea.dotenv.psi.DotEnvNamedElement" methods=[getKeyText getValueText getName setName getNameIdentifier]}
|
||||
|
||||
@@ -31,7 +31,7 @@ public class DotEnvKeyValuesIndex extends FileBasedIndexExtension<String, String
|
||||
|
||||
boolean storeValues = DotEnvSettings.getInstance().storeValues;
|
||||
|
||||
for (EnvironmentVariablesProvider provider : EnvironmentVariablesProviderUtil.PROVIDERS) {
|
||||
for (EnvironmentVariablesProvider provider : EnvironmentVariablesProviderUtil.getEnvVariablesProviders()) {
|
||||
for (KeyValuePsiElement keyValueElement : provider.getElements(fileContent.getPsiFile())) {
|
||||
if (storeValues) {
|
||||
map.put(keyValueElement.getKey(), keyValueElement.getShortValue());
|
||||
@@ -61,7 +61,7 @@ public class DotEnvKeyValuesIndex extends FileBasedIndexExtension<String, String
|
||||
@Override
|
||||
public FileBasedIndex.InputFilter getInputFilter() {
|
||||
return file -> {
|
||||
for (EnvironmentVariablesProvider provider : EnvironmentVariablesProviderUtil.PROVIDERS) {
|
||||
for (EnvironmentVariablesProvider provider : EnvironmentVariablesProviderUtil.getEnvVariablesProviders()) {
|
||||
if (provider.acceptFile(file).isAccepted()) return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package ru.adelf.idea.dotenv.php;
|
||||
|
||||
import com.intellij.psi.PsiElement;
|
||||
@@ -39,7 +40,7 @@ class PhpEnvironmentCallsVisitor extends PsiRecursiveElementVisitor {
|
||||
|
||||
String key = ((StringLiteralExpression)parameters[0]).getContents();
|
||||
|
||||
collectedItems.add(new KeyUsagePsiElement(key, parameters[0]));
|
||||
collectedItems.add(new KeyUsagePsiElement(key, expression));
|
||||
}
|
||||
|
||||
private void visitArrayAccess(ArrayAccessExpression expression) {
|
||||
|
||||
@@ -1,26 +1,21 @@
|
||||
package ru.adelf.idea.dotenv.util;
|
||||
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import ru.adelf.idea.dotenv.api.EnvironmentVariablesProvider;
|
||||
import ru.adelf.idea.dotenv.api.EnvironmentVariablesUsagesProvider;
|
||||
|
||||
public class EnvironmentVariablesProviderUtil {
|
||||
public static final EnvironmentVariablesProvider[] PROVIDERS = getEnvVariablesProviders();
|
||||
private static final ExtensionPointName<EnvironmentVariablesProvider> providersEP
|
||||
= new ExtensionPointName<>("ru.adelf.idea.dotenv.environmentVariablesProvider");
|
||||
|
||||
public static final EnvironmentVariablesUsagesProvider[] USAGES_PROVIDERS = getEnvVariablesUsagesProviders();
|
||||
private static final ExtensionPointName<EnvironmentVariablesUsagesProvider> usageProvidersEP
|
||||
= new ExtensionPointName<>("ru.adelf.idea.dotenv.environmentVariablesUsagesProvider");
|
||||
|
||||
private static EnvironmentVariablesProvider[] getEnvVariablesProviders() {
|
||||
return getExtensions("ru.adelf.idea.dotenv.environmentVariablesProvider");
|
||||
public static EnvironmentVariablesProvider[] getEnvVariablesProviders() {
|
||||
return providersEP.getExtensions();
|
||||
}
|
||||
|
||||
private static EnvironmentVariablesUsagesProvider[] getEnvVariablesUsagesProviders() {
|
||||
return getExtensions("ru.adelf.idea.dotenv.environmentVariablesUsagesProvider");
|
||||
}
|
||||
|
||||
private static <T> T[] getExtensions(@NotNull String name) {
|
||||
ExtensionPointName<T> pointName = new ExtensionPointName<>(name);
|
||||
|
||||
return pointName.getExtensions();
|
||||
public static EnvironmentVariablesUsagesProvider[] getEnvVariablesUsagesProviders() {
|
||||
return usageProvidersEP.getExtensions();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,9 +26,11 @@
|
||||
|
||||
<extensionPoints>
|
||||
<extensionPoint interface="ru.adelf.idea.dotenv.api.EnvironmentVariablesProvider"
|
||||
name="environmentVariablesProvider"/>
|
||||
name="environmentVariablesProvider"
|
||||
dynamic="true"/>
|
||||
<extensionPoint interface="ru.adelf.idea.dotenv.api.EnvironmentVariablesUsagesProvider"
|
||||
name="environmentVariablesUsagesProvider"/>
|
||||
name="environmentVariablesUsagesProvider"
|
||||
dynamic="true"/>
|
||||
</extensionPoints>
|
||||
|
||||
<depends>com.intellij.modules.platform</depends>
|
||||
@@ -46,7 +48,6 @@
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<applicationService serviceImplementation="ru.adelf.idea.dotenv.DotEnvSettings"/>
|
||||
<gotoDeclarationHandler implementation="ru.adelf.idea.dotenv.extension.DotEnvKeyGotoHandler"/>
|
||||
|
||||
<fileBasedIndex implementation="ru.adelf.idea.dotenv.indexing.DotEnvKeyValuesIndex"/>
|
||||
|
||||
@@ -57,6 +58,11 @@
|
||||
|
||||
<lang.foldingBuilder language="DotEnv" implementationClass="ru.adelf.idea.dotenv.extension.DotEnvValuesHiding"/>
|
||||
|
||||
<psi.symbolReferenceProvider hostElementClass="ru.adelf.idea.dotenv.psi.DotEnvKey"
|
||||
hostLanguage="DotEnv"
|
||||
implementationClass="ru.adelf.idea.dotenv.extension.symbols.DotEnvSymbolReferenceProvider"
|
||||
targetClass="ru.adelf.idea.dotenv.extension.symbols.DotEnvKeyUsageSymbol"/>
|
||||
|
||||
<localInspection language="DotEnv"
|
||||
groupName="DotEnv"
|
||||
shortName="DotEnvDuplicateKeyInspection"
|
||||
|
||||
@@ -1,22 +1,20 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
|
||||
width="40px" height="40px" viewBox="0 0 590.074 590.073" style="enable-background:new 0 0 590.074 590.073;"
|
||||
xml:space="preserve">
|
||||
<g>
|
||||
<path d="M537.804,174.688c0-44.772-33.976-81.597-77.552-86.12c-12.23-32.981-43.882-56.534-81.128-56.534
|
||||
c-16.304,0-31.499,4.59-44.514,12.422C319.808,17.949,291.513,0,258.991,0c-43.117,0-78.776,31.556-85.393,72.809
|
||||
c-3.519-0.43-7.076-0.727-10.71-0.727c-47.822,0-86.598,38.767-86.598,86.598c0,2.343,0.172,4.638,0.354,6.933
|
||||
c-24.25,15.348-40.392,42.333-40.392,73.153c0,27.244,12.604,51.513,32.273,67.387c-0.086,1.559-0.239,3.107-0.239,4.686
|
||||
c0,47.822,38.767,86.598,86.598,86.598c14.334,0,27.817-3.538,39.723-9.696c16.495,11.848,40.115,26.67,51.551,23.715
|
||||
c0,0,4.255,65.905,3.337,82.64c-1.75,31.843-11.303,67.291-18.025,95.979h104.117c0,0-15.348-63.954-16.018-85.307
|
||||
c-0.669-21.354,6.675-60.675,6.675-60.675l36.118-37.36c13.903,9.505,30.695,14.908,48.807,14.908
|
||||
c44.771,0,81.597-34.062,86.12-77.639c32.98-12.23,56.533-43.968,56.533-81.214c0-21.994-8.262-41.999-21.765-57.279
|
||||
C535.71,195.926,537.804,185.561,537.804,174.688z M214.611,373.444c6.942-6.627,12.766-14.372,17.212-22.969l17.002,35.62
|
||||
C248.816,386.096,239.569,390.179,214.611,373.444z M278.183,395.438c-8.798,1.597-23.782-25.494-34.416-47.517
|
||||
c11.791,6.015,25.102,9.477,39.254,9.477c3.634,0,7.201-0.296,10.72-0.736C291.006,374.286,286.187,393.975,278.183,395.438z
|
||||
M315.563,412.775c-20.35,5.651-8.167-36.501-2.334-60.904c4.218-1.568,8.301-3.413,12.183-5.604
|
||||
c2.343,17.786,10.069,33.832,21.516,46.521C337.011,401.597,325.593,409.992,315.563,412.775z" fill="#00aa00"/>
|
||||
</g>
|
||||
</svg>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 40 40">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
fill: #98d81d;
|
||||
}
|
||||
|
||||
.cls-1, .cls-2 {
|
||||
stroke-width: 0px;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #5f8916;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<path class="cls-1" d="M30.13,17.56c-2.6-7.12-10.13-14.38-10.13-14.38,0,0-7.53,7.26-10.13,14.38-.57,1.33-.89,2.8-.89,4.35,0,6.09,4.93,11.02,11.02,11.02s11.02-4.93,11.02-11.02c0-1.55-.32-3.01-.89-4.35Z"/>
|
||||
<path class="cls-2" d="M31.87,21.91c0-1.61-.32-3.18-.95-4.66-2.64-7.21-10.01-14.38-10.33-14.68l-.59-.57-.59.57c-.31.3-7.7,7.48-10.32,14.66-.64,1.49-.96,3.06-.96,4.69,0,6.26,4.87,11.39,11.02,11.83v3.42c0,.47.38.85.85.85s.85-.38.85-.85v-3.42c6.15-.44,11.02-5.57,11.02-11.83ZM20.85,32.04v-2.99l6.44-6.51c.33-.33.33-.87,0-1.2-.33-.33-.87-.33-1.2,0l-5.24,5.29v-5.92l4.73-4.79c.33-.33.33-.87,0-1.2-.33-.33-.87-.33-1.2,0l-3.52,3.56v-5.5c0-.47-.38-.85-.85-.85s-.85.38-.85.85v5.32l-3.53-3.4c-.34-.33-.88-.31-1.2.02-.33.34-.31.88.02,1.2l4.71,4.53v5.88l-5.25-5.02c-.34-.32-.88-.31-1.2.03-.32.34-.31.88.03,1.2l6.43,6.14v3.34c-5.21-.43-9.32-4.81-9.32-10.13,0-1.39.28-2.74.84-4.06,2.08-5.7,7.52-11.61,9.33-13.47,1.8,1.86,7.25,7.76,9.33,13.47l.02.04c.55,1.27.83,2.62.83,4.01,0,5.32-4.11,9.69-9.32,10.13Z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.3 KiB |
BIN
plugins/env-files-support/src/main/resources/icons/env.png
Normal file
BIN
plugins/env-files-support/src/main/resources/icons/env.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
BIN
plugins/env-files-support/src/main/resources/icons/env@2x.png
Normal file
BIN
plugins/env-files-support/src/main/resources/icons/env@2x.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.0 KiB |
Reference in New Issue
Block a user