mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
WEB-19898 Add code completion for eslintrc section inside package.json file
This commit is contained in:
@@ -14,4 +14,6 @@ public interface JsonSchemaFileProvider {
|
||||
VirtualFile getSchemaFile();
|
||||
|
||||
SchemaType getSchemaType();
|
||||
|
||||
int getOrder();
|
||||
}
|
||||
|
||||
@@ -75,6 +75,11 @@ public class JsonSchemaImportedProviderFactory implements JsonSchemaProviderFact
|
||||
return SchemaType.userSchema;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return 1000;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public String getName() {
|
||||
|
||||
@@ -67,5 +67,10 @@ public class JsonSchemaProjectSelfProviderFactory implements JsonSchemaProviderF
|
||||
public SchemaType getSchemaType() {
|
||||
return SchemaType.schema;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return -1000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,6 +93,7 @@ public class JsonSchemaReader {
|
||||
};
|
||||
|
||||
final HashMap<String, JsonSchemaObject> map = new HashMap<>();
|
||||
map.put("", object);
|
||||
final Map<String, JsonSchemaObject> definitions = object.getDefinitions();
|
||||
if (definitions != null && !definitions.isEmpty()) {
|
||||
map.putAll(convertor.convert("#/definitions/", definitions));
|
||||
@@ -160,11 +161,17 @@ public class JsonSchemaReader {
|
||||
@NotNull String ref,
|
||||
@Nullable JsonSchemaExportedDefinitions definitions) {
|
||||
if (!ref.startsWith("#/")) {
|
||||
int idx = ref.indexOf("#/");
|
||||
if (idx == -1) throw new RuntimeException("Non-relative or erroneous reference: " + ref);
|
||||
if (definitions == null || key == null) return null;
|
||||
final String url = ref.substring(0, idx);
|
||||
final String relative = ref.substring(idx);
|
||||
int idx = ref.indexOf("#/");
|
||||
final String url;
|
||||
final String relative;
|
||||
if (idx == -1) {
|
||||
url = ref.endsWith("#") ? ref.substring(0, ref.length() - 1) : ref;
|
||||
relative = "";
|
||||
} else {
|
||||
url = ref.substring(0, idx);
|
||||
relative = ref.substring(idx);
|
||||
}
|
||||
return definitions.findDefinition(key, url, relative);
|
||||
}
|
||||
return null;
|
||||
|
||||
@@ -43,6 +43,12 @@ import java.util.*;
|
||||
public class JsonSchemaServiceImpl implements JsonSchemaServiceEx {
|
||||
private static final Logger LOGGER = Logger.getInstance(JsonSchemaServiceImpl.class);
|
||||
private static final Logger RARE_LOGGER = RareLogger.wrap(LOGGER, false);
|
||||
public static final Comparator<JsonSchemaFileProvider> FILE_PROVIDER_COMPARATOR = new Comparator<JsonSchemaFileProvider>() {
|
||||
@Override
|
||||
public int compare(JsonSchemaFileProvider o1, JsonSchemaFileProvider o2) {
|
||||
return Integer.compare(o1.getOrder(), o2.getOrder());
|
||||
}
|
||||
};
|
||||
@NotNull
|
||||
private final Project myProject;
|
||||
private final Object myLock;
|
||||
@@ -57,7 +63,7 @@ public class JsonSchemaServiceImpl implements JsonSchemaServiceEx {
|
||||
myDefinitions = new JsonSchemaExportedDefinitions(this::iterateSchemas);
|
||||
ApplicationManager
|
||||
.getApplication().getMessageBus().connect(project).subscribe(VirtualFileManager.VFS_CHANGES, new JsonSchemaVfsListener(project, this));
|
||||
ensureSchemaFiles(project);
|
||||
ensureSchemaFiles();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -65,6 +71,15 @@ public class JsonSchemaServiceImpl implements JsonSchemaServiceEx {
|
||||
return JsonSchemaProviderFactory.EP_NAME.getExtensions();
|
||||
}
|
||||
|
||||
private List<JsonSchemaFileProvider> getProviders() {
|
||||
final List<JsonSchemaFileProvider> providers = new ArrayList<>();
|
||||
for (JsonSchemaProviderFactory factory : getProviderFactories()) {
|
||||
providers.addAll(factory.getProviders(myProject));
|
||||
}
|
||||
Collections.sort(providers, FILE_PROVIDER_COMPARATOR);
|
||||
return providers;
|
||||
}
|
||||
|
||||
|
||||
@Nullable
|
||||
public Annotator getAnnotator(@Nullable VirtualFile file) {
|
||||
@@ -86,22 +101,18 @@ public class JsonSchemaServiceImpl implements JsonSchemaServiceEx {
|
||||
@Override
|
||||
public boolean isRegisteredSchemaFile(@NotNull Project project, @NotNull VirtualFile file) {
|
||||
if (!initialized) {
|
||||
ensureSchemaFiles(project);
|
||||
ensureSchemaFiles();
|
||||
}
|
||||
return mySchemaFiles.contains(file);
|
||||
}
|
||||
|
||||
private void ensureSchemaFiles(@NotNull final Project project) {
|
||||
private void ensureSchemaFiles() {
|
||||
synchronized (myLock) {
|
||||
if (!initialized) {
|
||||
final JsonSchemaProviderFactory[] factories = getProviderFactories();
|
||||
for (JsonSchemaProviderFactory factory : factories) {
|
||||
final List<JsonSchemaFileProvider> providers = factory.getProviders(project);
|
||||
for (JsonSchemaFileProvider provider : providers) {
|
||||
final VirtualFile schemaFile = provider.getSchemaFile();
|
||||
if (schemaFile != null) {
|
||||
mySchemaFiles.add(schemaFile);
|
||||
}
|
||||
for (JsonSchemaFileProvider provider : getProviders()) {
|
||||
final VirtualFile schemaFile = provider.getSchemaFile();
|
||||
if (schemaFile != null) {
|
||||
mySchemaFiles.add(schemaFile);
|
||||
}
|
||||
}
|
||||
initialized = true;
|
||||
@@ -226,17 +237,14 @@ public class JsonSchemaServiceImpl implements JsonSchemaServiceEx {
|
||||
}
|
||||
|
||||
public void iterateSchemas(@NotNull final PairConsumer<VirtualFile, NullableLazyValue<JsonSchemaObject>> consumer) {
|
||||
final JsonSchemaProviderFactory[] factories = getProviderFactories();
|
||||
for (JsonSchemaProviderFactory factory : factories) {
|
||||
for (JsonSchemaFileProvider provider : factory.getProviders(myProject)) {
|
||||
consumer.consume(provider.getSchemaFile(),
|
||||
new NullableLazyValue<JsonSchemaObject>() {
|
||||
@Override
|
||||
protected JsonSchemaObject compute() {
|
||||
return readObject(provider, null);
|
||||
}
|
||||
});
|
||||
}
|
||||
for (JsonSchemaFileProvider provider : getProviders()) {
|
||||
consumer.consume(provider.getSchemaFile(),
|
||||
new NullableLazyValue<JsonSchemaObject>() {
|
||||
@Override
|
||||
protected JsonSchemaObject compute() {
|
||||
return readObject(provider, null);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,22 +263,19 @@ public class JsonSchemaServiceImpl implements JsonSchemaServiceEx {
|
||||
private List<JsonSchemaObjectCodeInsightWrapper> getWrappers(@Nullable VirtualFile file) {
|
||||
if (file == null) return null;
|
||||
final List<JsonSchemaObjectCodeInsightWrapper> wrappers = new ArrayList<>();
|
||||
JsonSchemaProviderFactory[] factories = getProviderFactories();
|
||||
synchronized (myLock) {
|
||||
final Set<VirtualFile> files = mySchemaFiles.isEmpty() ? new HashSet<>() : null;
|
||||
for (JsonSchemaProviderFactory factory : factories) {
|
||||
for (JsonSchemaFileProvider provider : factory.getProviders(myProject)) {
|
||||
final VirtualFile key = provider.getSchemaFile();
|
||||
if (files != null) files.add(key);
|
||||
if (provider.isAvailable(myProject, file)) {
|
||||
JsonSchemaObjectCodeInsightWrapper wrapper = myWrappers.get(key);
|
||||
if (wrapper == null) {
|
||||
wrapper = createWrapper(provider);
|
||||
if (wrapper == null) return null;
|
||||
myWrappers.putIfAbsent(key, wrapper);
|
||||
}
|
||||
wrappers.add(wrapper);
|
||||
for (JsonSchemaFileProvider provider : getProviders()) {
|
||||
final VirtualFile key = provider.getSchemaFile();
|
||||
if (files != null) files.add(key);
|
||||
if (provider.isAvailable(myProject, file)) {
|
||||
JsonSchemaObjectCodeInsightWrapper wrapper = myWrappers.get(key);
|
||||
if (wrapper == null) {
|
||||
wrapper = createWrapper(provider);
|
||||
if (wrapper == null) return null;
|
||||
myWrappers.putIfAbsent(key, wrapper);
|
||||
}
|
||||
wrappers.add(wrapper);
|
||||
}
|
||||
}
|
||||
if (files != null) mySchemaFiles.addAll(files);
|
||||
@@ -354,7 +359,7 @@ public class JsonSchemaServiceImpl implements JsonSchemaServiceEx {
|
||||
@Override
|
||||
public Set<VirtualFile> getSchemaFiles() {
|
||||
if (!initialized) {
|
||||
ensureSchemaFiles(myProject);
|
||||
ensureSchemaFiles();
|
||||
}
|
||||
return Collections.unmodifiableSet(mySchemaFiles);
|
||||
}
|
||||
|
||||
@@ -36,4 +36,9 @@ public class JsonSchemaTestProvider implements JsonSchemaFileProvider {
|
||||
public SchemaType getSchemaType() {
|
||||
return SchemaType.userSchema;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getOrder() {
|
||||
return 10;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user