Skip to content

Commit f002ea8

Browse files
angelozerrvrubezhny
authored andcommitted
YAML preferences
Signed-off-by: azerr <[email protected]>
1 parent 59fa6cb commit f002ea8

17 files changed

+814
-114
lines changed

org.eclipse.wildwebdeveloper/plugin.properties

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,11 @@ HTMLPreferencePage.name=HTML (Wild Web Developer)
3636
HTMLCompletionPreferencePage.name=Completion
3737
HTMLFormatPreferencePage.name=Format
3838
HTMLHoverPreferencePage.name=Hover
39-
HTMLValidationPreferencePage.name=Validation
39+
HTMLValidationPreferencePage.name=Validation
40+
41+
# YAML
42+
YAMLPreferencePage.name=YAML (Wild Web Developer)
43+
YAMLCompletionPreferencePage.name=Completion
44+
YAMLFormatPreferencePage.name=Format
45+
YAMLHoverPreferencePage.name=Hover
46+
YAMLValidationPreferencePage.name=Validation

org.eclipse.wildwebdeveloper/plugin.xml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,49 @@
709709
scopeName="source.yaml">
710710
</snippet>
711711
</extension>
712+
713+
<extension
714+
point="org.eclipse.ui.preferencePages">
715+
<page
716+
class="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLPreferencePage"
717+
id="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLPreferencePage"
718+
name="%YAMLPreferencePage.name">
719+
</page>
720+
<page
721+
category="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLPreferencePage"
722+
class="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLCompletionPreferencePage"
723+
id="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLCompletionPreferencePage"
724+
name="%YAMLCompletionPreferencePage.name">
725+
</page>
726+
<page
727+
category="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLPreferencePage"
728+
class="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLFormatPreferencePage"
729+
id="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLFormatPreferencePage"
730+
name="%YAMLFormatPreferencePage.name">
731+
</page>
732+
<page
733+
category="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLPreferencePage"
734+
class="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLHoverPreferencePage"
735+
id="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLHoverPreferencePage"
736+
name="%YAMLHoverPreferencePage.name">
737+
</page>
738+
<page
739+
category="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLPreferencePage"
740+
class="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLValidationPreferencePage"
741+
id="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLValidationPreferencePage"
742+
name="%YAMLValidationPreferencePage.name">
743+
</page>
744+
</extension>
745+
746+
<extension
747+
id="YAMLPreferenceInitializer"
748+
name="YAMLPreferenceInitializer"
749+
point="org.eclipse.core.runtime.preferences">
750+
<initializer
751+
class="org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLPreferenceInitializer">
752+
</initializer>
753+
</extension>
754+
712755
<extension
713756
point="org.eclipse.ui.preferencePages">
714757
<page
@@ -718,6 +761,7 @@
718761
name="Schema Associations">
719762
</page>
720763
</extension>
764+
721765
<extension
722766
id="JSONPreferenceInitializer"
723767
name="JSONPreferenceInitializer"

org.eclipse.wildwebdeveloper/src/org/eclipse/wildwebdeveloper/SchemaAssociationsPreferencePage.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
@SuppressWarnings("restriction")
4444
public class SchemaAssociationsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
4545

46+
public static final String PAGE_ID= "org.eclipse.wildwebdeveloper.SchemaAssociationsPreferencePage";
47+
4648
private IPreferenceStore store;
4749
private Table schemaTable;
4850

org.eclipse.wildwebdeveloper/src/org/eclipse/wildwebdeveloper/css/CSSLanguageClient.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import org.eclipse.wildwebdeveloper.ui.preferences.Settings;
3030

3131
/**
32-
* HTML language client implementation.
32+
* CSS language client implementation.
3333
*
3434
*/
3535
public class CSSLanguageClient extends LanguageClientImpl {

org.eclipse.wildwebdeveloper/src/org/eclipse/wildwebdeveloper/ui/preferences/Settings.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,24 +32,28 @@ public Settings(IPreferenceStore store) {
3232

3333
public void fillAsBoolean(String preferenceId) {
3434
boolean preferenceValue = store.getBoolean(preferenceId);
35-
fillSetting(preferenceId, preferenceValue, this);
35+
fillSetting(preferenceId, preferenceValue);
3636
}
3737

3838
public void fillAsInt(String preferenceId) {
3939
int preferenceValue = store.getInt(preferenceId);
40-
fillSetting(preferenceId, preferenceValue, this);
40+
fillSetting(preferenceId, preferenceValue);
4141
}
4242

4343
public void fillAsString(String preferenceId) {
4444
String preferenceValue = store.getString(preferenceId);
45-
fillSetting(preferenceId, preferenceValue, this);
45+
fillSetting(preferenceId, preferenceValue);
4646
}
4747

4848
public void fillAsStringArray(String preferenceId, String separator) {
4949
String[] preferenceValue = store.getString(preferenceId).split(separator);
50+
fillSetting(preferenceId, preferenceValue);
51+
}
52+
53+
public void fillSetting(String preferenceId, Object preferenceValue) {
5054
fillSetting(preferenceId, preferenceValue, this);
5155
}
52-
56+
5357
@SuppressWarnings("unchecked")
5458
private static void fillSetting(String preferenceId, Object preferenceValue, Map<String, Object> settings) {
5559
Map<String, Object> result = settings;

org.eclipse.wildwebdeveloper/src/org/eclipse/wildwebdeveloper/yaml/YAMLLanguageServer.java

Lines changed: 18 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -13,66 +13,35 @@
1313
import java.net.URI;
1414
import java.net.URL;
1515
import java.util.ArrayList;
16-
import java.util.HashMap;
1716
import java.util.List;
18-
import java.util.Map;
1917

2018
import org.eclipse.core.runtime.FileLocator;
21-
import org.eclipse.core.runtime.IConfigurationElement;
2219
import org.eclipse.core.runtime.IStatus;
23-
import org.eclipse.core.runtime.Platform;
2420
import org.eclipse.core.runtime.Status;
25-
import org.eclipse.core.runtime.content.IContentType;
26-
import org.eclipse.core.runtime.content.IContentTypeManager;
27-
import org.eclipse.jface.preference.IPreferenceStore;
28-
import org.eclipse.jface.util.IPropertyChangeListener;
2921
import org.eclipse.jface.util.PropertyChangeEvent;
30-
import org.eclipse.lsp4e.LanguageServersRegistry;
31-
import org.eclipse.lsp4e.LanguageServersRegistry.LanguageServerDefinition;
32-
import org.eclipse.lsp4e.LanguageServiceAccessor;
33-
import org.eclipse.lsp4e.server.ProcessStreamConnectionProvider;
3422
import org.eclipse.lsp4j.DidChangeConfigurationParams;
3523
import org.eclipse.lsp4j.InitializeResult;
3624
import org.eclipse.lsp4j.jsonrpc.messages.Message;
3725
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage;
3826
import org.eclipse.lsp4j.services.LanguageServer;
3927
import org.eclipse.wildwebdeveloper.Activator;
40-
import org.eclipse.wildwebdeveloper.SchemaAssociationRegistry;
4128
import org.eclipse.wildwebdeveloper.SchemaAssociationsPreferenceInitializer;
4229
import org.eclipse.wildwebdeveloper.embedder.node.NodeJSManager;
43-
import org.eclipse.wildwebdeveloper.json.JSonLanguageServer;
30+
import org.eclipse.wildwebdeveloper.ui.preferences.ProcessStreamConnectionProviderWithPreference;
31+
import org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLPreferenceServerConstants;
4432

45-
import com.google.gson.Gson;
46-
import com.google.gson.reflect.TypeToken;
47-
48-
@SuppressWarnings("restriction")
49-
public class YAMLLanguageServer extends ProcessStreamConnectionProvider {
50-
private static final String YAML_KEY = "yaml";
51-
private static final String VALIDATE_KEY = "validate";
52-
private static final String COMPLETION_KEY = "completion";
53-
private static final String HOVER_KEY = "hover";
54-
private static final String SCHEMAS_KEY = "schemas";
33+
/**
34+
* YAML language server.
35+
*
36+
*/
37+
public class YAMLLanguageServer extends ProcessStreamConnectionProviderWithPreference {
5538

56-
private static final IPreferenceStore PREFERENCE_STORE = Activator.getDefault().getPreferenceStore();
57-
private static final LanguageServerDefinition YAML_LS_DEFINITION = LanguageServersRegistry.getInstance()
58-
.getDefinition("org.eclipse.wildwebdeveloper.yaml");
59-
private static final IPropertyChangeListener PROPERTY_CHANGE_LISTENER = new IPropertyChangeListener() {
60-
@Override
61-
public void propertyChange(PropertyChangeEvent event) {
62-
if (SchemaAssociationsPreferenceInitializer.SCHEMA_ASSOCIATIONS_PREFERENCE.equals(event.getProperty())) {
63-
Map<String, Object> settings = new HashMap<>();
64-
settings.put(YAML_KEY, getYamlConfigurationOptions());
39+
private static final String YAML_LANGUAGE_SERVER_ID = "org.eclipse.wildwebdeveloper.yaml";
6540

66-
DidChangeConfigurationParams params = new DidChangeConfigurationParams(settings);
67-
LanguageServiceAccessor.getActiveLanguageServers(null).stream()
68-
.filter(server -> YAML_LS_DEFINITION
69-
.equals(LanguageServiceAccessor.resolveServerDefinition(server).get()))
70-
.forEach(ls -> ls.getWorkspaceService().didChangeConfiguration(params));
71-
}
72-
}
73-
};
41+
private static final String[] SUPPORTED_SECTIONS = { "yaml" };
7442

7543
public YAMLLanguageServer() {
44+
super(YAML_LANGUAGE_SERVER_ID, Activator.getDefault().getPreferenceStore(), SUPPORTED_SECTIONS);
7645
List<String> commands = new ArrayList<>();
7746
commands.add(NodeJSManager.getNodeJsLocation().getAbsolutePath());
7847
try {
@@ -92,85 +61,28 @@ public YAMLLanguageServer() {
9261
public void handleMessage(Message message, LanguageServer languageServer, URI rootUri) {
9362
if (message instanceof ResponseMessage responseMessage) {
9463
if (responseMessage.getResult() instanceof InitializeResult) {
95-
Map<String, Object> settings = new HashMap<>();
96-
settings.put(YAML_KEY, getYamlConfigurationOptions());
64+
Object settings = createSettings();
9765

9866
DidChangeConfigurationParams params = new DidChangeConfigurationParams(settings);
9967
languageServer.getWorkspaceService().didChangeConfiguration(params);
10068
}
10169
}
10270
}
10371

104-
static Map<String, Object> getYamlConfigurationOptions() {
105-
Map<String, Object> yaml = new HashMap<>();
106-
yaml.put(SCHEMAS_KEY, getSchemaAssociations());
107-
yaml.put(VALIDATE_KEY, true);
108-
yaml.put(COMPLETION_KEY, true);
109-
yaml.put(HOVER_KEY, true);
110-
yaml.put("schemaStore.enable", true);
111-
return yaml;
72+
@Override
73+
protected boolean isAffected(PropertyChangeEvent event) {
74+
return super.isAffected(event)
75+
|| SchemaAssociationsPreferenceInitializer.SCHEMA_ASSOCIATIONS_PREFERENCE.equals(event.getProperty());
11276
}
11377

114-
private static Map<String, Object> getSchemaAssociations() {
115-
IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
116-
String schemaString = preferenceStore
117-
.getString(SchemaAssociationsPreferenceInitializer.SCHEMA_ASSOCIATIONS_PREFERENCE);
118-
119-
Map<String, Object> contentTypeAssociations = new Gson().fromJson(schemaString,
120-
new TypeToken<HashMap<String, String>>() {
121-
}.getType());
122-
123-
IContentTypeManager contentTypeManager = Platform.getContentTypeManager();
124-
IContentType yamlBaseContentType = contentTypeManager.getContentType("org.eclipse.wildwebdeveloper.yaml");
125-
126-
Map<String, Object> associations = new HashMap<>();
127-
128-
contentTypeAssociations.forEach((key, value) -> {
129-
IContentType contentType = contentTypeManager.getContentType(key);
130-
if (contentType != null && contentType.getBaseType().equals(yamlBaseContentType)) {
131-
String[] fileNames = contentType.getFileSpecs(IContentType.FILE_NAME_SPEC);
132-
for (String fileName : fileNames) {
133-
associations.put(value.toString(), fileName);
134-
}
135-
136-
String[] filePatterns = contentType.getFileSpecs(IContentType.FILE_PATTERN_SPEC);
137-
for (String pattern : filePatterns) {
138-
associations.put(value.toString(), pattern);
139-
}
140-
141-
String[] fileExtensions = contentType.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
142-
for (String extension : fileExtensions) {
143-
associations.put(value.toString(), "*." + extension);
144-
}
145-
}
146-
});
147-
148-
IConfigurationElement[] conf = Platform.getExtensionRegistry().getConfigurationElementsFor(JSonLanguageServer.SCHEMA_EXT);
149-
for (IConfigurationElement el : conf) {
150-
String url = el.getAttribute(JSonLanguageServer.URL_ATTR);
151-
String pattern = el.getAttribute(JSonLanguageServer.PATTERN_ATTR);
152-
if (!url.isBlank() && !pattern.isBlank()) {
153-
associations.put(SchemaAssociationRegistry.translate(url), pattern);
154-
}
155-
}
156-
157-
return associations;
78+
@Override
79+
protected Object createSettings() {
80+
return YAMLPreferenceServerConstants.getGlobalSettings();
15881
}
15982

16083
@Override
16184
public String toString() {
16285
return "YAML Language Server: " + super.toString();
16386
}
16487

165-
@Override
166-
public void start() throws IOException {
167-
super.start();
168-
PREFERENCE_STORE.addPropertyChangeListener(PROPERTY_CHANGE_LISTENER);
169-
}
170-
171-
@Override
172-
public void stop() {
173-
PREFERENCE_STORE.removePropertyChangeListener(PROPERTY_CHANGE_LISTENER);
174-
super.stop();
175-
}
17688
}

org.eclipse.wildwebdeveloper/src/org/eclipse/wildwebdeveloper/yaml/YamlLanguageClientImpl.java

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,44 @@
99
*******************************************************************************/
1010
package org.eclipse.wildwebdeveloper.yaml;
1111

12+
import static org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLPreferenceServerConstants.isMatchYamlSection;
13+
14+
import java.util.ArrayList;
1215
import java.util.List;
1316
import java.util.concurrent.CompletableFuture;
1417

1518
import org.eclipse.lsp4e.LanguageClientImpl;
19+
import org.eclipse.lsp4j.ConfigurationItem;
1620
import org.eclipse.lsp4j.ConfigurationParams;
21+
import org.eclipse.wildwebdeveloper.ui.preferences.Settings;
22+
import org.eclipse.wildwebdeveloper.yaml.ui.preferences.YAMLPreferenceServerConstants;
1723

24+
/**
25+
* YAML language client implementation.
26+
*
27+
*/
1828
public class YamlLanguageClientImpl extends LanguageClientImpl {
1929

2030
@Override
21-
public CompletableFuture<List<Object>> configuration(ConfigurationParams configurationParams) {
22-
return CompletableFuture.completedFuture(List.of(YAMLLanguageServer.getYamlConfigurationOptions()));
31+
public CompletableFuture<List<Object>> configuration(ConfigurationParams params) {
32+
return CompletableFuture.supplyAsync(() -> {
33+
List<Object> settings = new ArrayList<>();
34+
for (ConfigurationItem item : params.getItems()) {
35+
String section = item.getSection();
36+
if (isMatchYamlSection(section)) {
37+
// See https://github.com/redhat-developer/yaml-language-server/blob/c4b56b155eae1b8aa53817b7caef7dd1032b93ff/src/languageserver/handlers/settingsHandlers.ts#L42
38+
// 'yaml' section, returns the yaml settings
39+
Settings yamlSettings = YAMLPreferenceServerConstants.getGlobalSettings();
40+
settings.add(yamlSettings.findSettings(section.split("[.]")));
41+
} else {
42+
// TODO manage another section like http, [yaml], editor, files
43+
// See https://github.com/redhat-developer/yaml-language-server/blob/c4b56b155eae1b8aa53817b7caef7dd1032b93ff/src/languageserver/handlers/settingsHandlers.ts#L43
44+
// Unkwown section
45+
settings.add(null);
46+
}
47+
}
48+
return settings;
49+
});
2350
}
51+
2452
}

0 commit comments

Comments
 (0)