Skip to content

Commit 24d537e

Browse files
angelozerrvrubezhny
authored andcommitted
CSS, LESS, SCSS preferences
Signed-off-by: azerr <[email protected]>
1 parent 172a7ac commit 24d537e

30 files changed

+2098
-33
lines changed

RELEASE_NOTES.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ This page describes the noteworthy improvements provided by each release of Ecli
55
## 0.15.2
66

77
#### Editing improvements
8-
* XML auto closing tag
9-
* HTML auto closing tag and auto creation of quotes for HTML attribute assignment
8+
* XML auto closing tag
109
* RelaxNG support : XML validation, completion hover based on RelaxNG schema
1110
* Syntax coloration for DTD
1211
* Syntax coloration / language configuration for RelaxNG compact syntax (.rng)
12+
* HTML auto closing tag and auto creation of quotes for HTML attribute assignment
13+
* HTML preferences (without spaces/tabs configuration)
14+
* CSS preferences (without spaces/tabs configuration)
1315

1416
## 0.15.1
1517

org.eclipse.wildwebdeveloper/plugin.properties

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,26 @@
1212
pluginName=Wild Web Developer: web development in Eclipse IDE
1313
providerName=Eclipse Wild Web Developer project
1414

15+
# CSS, LESS, SCSS
16+
CSSPreferencePage.name=CSS (Wild Web Developer)
17+
CSSCompletionPreferencePage.name=Completion
18+
CSSFormatPreferencePage.name=Format
19+
CSSHoverPreferencePage.name=Hover
20+
CSSValidationPreferencePage.name=Validation
21+
22+
LESSPreferencePage.name=LESS
23+
LESSCompletionPreferencePage.name=Completion
24+
LESSFormatPreferencePage.name=Format
25+
LESSHoverPreferencePage.name=Hover
26+
LESSValidationPreferencePage.name=Validation
27+
28+
SCSSPreferencePage.name=SCSS
29+
SCSSCompletionPreferencePage.name=Completion
30+
SCSSFormatPreferencePage.name=Format
31+
SCSSHoverPreferencePage.name=Hover
32+
SCSSValidationPreferencePage.name=Validation
33+
34+
# HTML
1535
HTMLPreferencePage.name=HTML (Wild Web Developer)
1636
HTMLCompletionPreferencePage.name=Completion
1737
HTMLFormatPreferencePage.name=Format

org.eclipse.wildwebdeveloper/plugin.xml

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@
191191
point="org.eclipse.lsp4e.languageServer">
192192
<server
193193
class="org.eclipse.wildwebdeveloper.css.CSSLanguageServer"
194+
clientImpl="org.eclipse.wildwebdeveloper.css.CSSLanguageClient"
194195
id="org.eclipse.wildwebdeveloper.css"
195196
label="CSS/LESS/SCSS Language Server (VSCode)"
196197
singleton="true">
@@ -266,6 +267,122 @@
266267
<icon contentType="org.eclipse.wildwebdeveloper.css" icon="icons/cssEditorIcon.png"/>
267268
</extension>
268269

270+
<extension
271+
point="org.eclipse.ui.preferencePages">
272+
<page
273+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSPreferencePage"
274+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSPreferencePage"
275+
name="%CSSPreferencePage.name">
276+
</page>
277+
<page
278+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSPreferencePage"
279+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSCompletionPreferencePage"
280+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSCompletionPreferencePage"
281+
name="%CSSCompletionPreferencePage.name">
282+
</page>
283+
<!-- Once https://github.com/microsoft/vscode/issues/164772 will be fixed, please uncomment this CSS format preference page to benefit with CSS formatting
284+
<page
285+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSPreferencePage"
286+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSFormatPreferencePage"
287+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSFormatPreferencePage"
288+
name="%CSSFormatPreferencePage.name">
289+
</page>
290+
-->
291+
<page
292+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSPreferencePage"
293+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSHoverPreferencePage"
294+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSHoverPreferencePage"
295+
name="%CSSHoverPreferencePage.name">
296+
</page>
297+
<page
298+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSPreferencePage"
299+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSValidationPreferencePage"
300+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSValidationPreferencePage"
301+
name="%CSSValidationPreferencePage.name">
302+
</page>
303+
</extension>
304+
305+
<extension
306+
point="org.eclipse.ui.preferencePages">
307+
<page
308+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSPreferencePage"
309+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSPreferencePage"
310+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSPreferencePage"
311+
name="%LESSPreferencePage.name">
312+
</page>
313+
<page
314+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSPreferencePage"
315+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSCompletionPreferencePage"
316+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSCompletionPreferencePage"
317+
name="%LESSCompletionPreferencePage.name">
318+
</page>
319+
<!-- Once https://github.com/microsoft/vscode/issues/164772 will be fixed, please uncomment this LESS format preference page to benefit with LESS formatting
320+
<page
321+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSPreferencePage"
322+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSFormatPreferencePage"
323+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSFormatPreferencePage"
324+
name="%LESSFormatPreferencePage.name">
325+
</page>
326+
-->
327+
<page
328+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSPreferencePage"
329+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSHoverPreferencePage"
330+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSHoverPreferencePage"
331+
name="%LESSHoverPreferencePage.name">
332+
</page>
333+
<page
334+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSPreferencePage"
335+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSValidationPreferencePage"
336+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSValidationPreferencePage"
337+
name="%LESSValidationPreferencePage.name">
338+
</page>
339+
</extension>
340+
341+
<extension
342+
point="org.eclipse.ui.preferencePages">
343+
<page
344+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSPreferencePage"
345+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSPreferencePage"
346+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSPreferencePage"
347+
name="%SCSSPreferencePage.name">
348+
</page>
349+
<page
350+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSPreferencePage"
351+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSCompletionPreferencePage"
352+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSCompletionPreferencePage"
353+
name="%SCSSCompletionPreferencePage.name">
354+
</page>
355+
<!-- Once https://github.com/microsoft/vscode/issues/164772 will be fixed, please uncomment this SCSS format preference page to benefit with SCSS formatting
356+
<page
357+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSPreferencePage"
358+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSFormatPreferencePage"
359+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSFormatPreferencePage"
360+
name="%SCSSFormatPreferencePage.name">
361+
</page>
362+
-->
363+
<page
364+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSPreferencePage"
365+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSHoverPreferencePage"
366+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSHoverPreferencePage"
367+
name="%SCSSHoverPreferencePage.name">
368+
</page>
369+
<page
370+
category="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSPreferencePage"
371+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSValidationPreferencePage"
372+
id="org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSValidationPreferencePage"
373+
name="%SCSSValidationPreferencePage.name">
374+
</page>
375+
</extension>
376+
377+
<extension
378+
id="CSSPreferenceInitializer"
379+
name="CSSPreferenceInitializer"
380+
point="org.eclipse.core.runtime.preferences">
381+
<initializer
382+
class="org.eclipse.wildwebdeveloper.css.ui.preferences.CSSPreferenceInitializer">
383+
</initializer>
384+
</extension>
385+
269386
<!-- HTML Language -->
270387
<extension
271388
point="org.eclipse.core.contenttype.contentTypes">
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2022 Red Hat Inc. and others.
3+
*
4+
* This program and the accompanying materials are made
5+
* available under the terms of the Eclipse Public License 2.0
6+
* which is available at https://www.eclipse.org/legal/epl-2.0/
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*
10+
* Contributors:
11+
* Angelo ZERR (Red Hat Inc.) - initial implementation
12+
*******************************************************************************/
13+
package org.eclipse.wildwebdeveloper.css;
14+
15+
import static org.eclipse.wildwebdeveloper.css.ui.preferences.CSSPreferenceServerConstants.isMatchCssSection;
16+
import static org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSPreferenceServerConstants.isMatchLessSection;
17+
import static org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSPreferenceServerConstants.isMatchScssSection;
18+
19+
import java.util.ArrayList;
20+
import java.util.List;
21+
import java.util.concurrent.CompletableFuture;
22+
23+
import org.eclipse.lsp4e.LanguageClientImpl;
24+
import org.eclipse.lsp4j.ConfigurationItem;
25+
import org.eclipse.lsp4j.ConfigurationParams;
26+
import org.eclipse.wildwebdeveloper.css.ui.preferences.CSSPreferenceServerConstants;
27+
import org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSPreferenceServerConstants;
28+
import org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSPreferenceServerConstants;
29+
import org.eclipse.wildwebdeveloper.ui.preferences.Settings;
30+
31+
/**
32+
* HTML language client implementation.
33+
*
34+
*/
35+
public class CSSLanguageClient extends LanguageClientImpl {
36+
37+
@Override
38+
public CompletableFuture<List<Object>> configuration(ConfigurationParams params) {
39+
return CompletableFuture.supplyAsync(() -> {
40+
// The CSS language server asks for a given uri, the settings for 'css',
41+
// 'less', 'scss'
42+
// See
43+
// https://github.com/microsoft/vscode/blob/7bd27b4287b49e61a1cb49e18f370260144c8685/extensions/css-language-features/server/src/cssServer.ts#L156
44+
List<Object> settings = new ArrayList<>();
45+
for (ConfigurationItem item : params.getItems()) {
46+
String section = item.getSection();
47+
if (isMatchCssSection(section)) {
48+
// 'css' section, returns the css settings
49+
Settings cssSettings = CSSPreferenceServerConstants.getGlobalSettings();
50+
settings.add(cssSettings.findSettings(section.split("[.]")));
51+
} else if (isMatchLessSection(section)) {
52+
// 'less' section, returns the less settings
53+
Settings cssSettings = LESSPreferenceServerConstants.getGlobalSettings();
54+
settings.add(cssSettings.findSettings(section.split("[.]")));
55+
} else if (isMatchScssSection(section)) {
56+
// 'scss' section, returns the scss settings
57+
Settings cssSettings = SCSSPreferenceServerConstants.getGlobalSettings();
58+
settings.add(cssSettings.findSettings(section.split("[.]")));
59+
} else {
60+
// Unkwown section
61+
settings.add(null);
62+
}
63+
}
64+
return settings;
65+
});
66+
}
67+
}

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

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,63 +16,69 @@
1616
import java.net.URI;
1717
import java.net.URL;
1818
import java.util.ArrayList;
19-
import java.util.Collections;
2019
import java.util.HashMap;
2120
import java.util.List;
2221
import java.util.Map;
2322

2423
import org.eclipse.core.runtime.FileLocator;
2524
import org.eclipse.core.runtime.IStatus;
2625
import org.eclipse.core.runtime.Status;
27-
import org.eclipse.lsp4e.server.ProcessStreamConnectionProvider;
28-
import org.eclipse.lsp4j.DidChangeConfigurationParams;
29-
import org.eclipse.lsp4j.InitializeResult;
30-
import org.eclipse.lsp4j.jsonrpc.messages.Message;
31-
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage;
32-
import org.eclipse.lsp4j.services.LanguageServer;
3326
import org.eclipse.wildwebdeveloper.Activator;
27+
import org.eclipse.wildwebdeveloper.css.ui.preferences.CSSPreferenceServerConstants;
28+
import org.eclipse.wildwebdeveloper.css.ui.preferences.less.LESSPreferenceServerConstants;
29+
import org.eclipse.wildwebdeveloper.css.ui.preferences.scss.SCSSPreferenceServerConstants;
3430
import org.eclipse.wildwebdeveloper.embedder.node.NodeJSManager;
31+
import org.eclipse.wildwebdeveloper.ui.preferences.ProcessStreamConnectionProviderWithPreference;
3532

36-
public class CSSLanguageServer extends ProcessStreamConnectionProvider {
33+
public class CSSLanguageServer extends ProcessStreamConnectionProviderWithPreference {
34+
35+
private static final String CSS_LANGUAGE_SERVER_ID = "org.eclipse.wildwebdeveloper.css";
36+
37+
private static final String[] SUPPORTED_SECTIONS = { "css", "scss", "less" };
3738

3839
public CSSLanguageServer() {
40+
super(CSS_LANGUAGE_SERVER_ID, Activator.getDefault().getPreferenceStore(), SUPPORTED_SECTIONS);
3941
List<String> commands = new ArrayList<>();
4042
commands.add(NodeJSManager.getNodeJsLocation().getAbsolutePath());
4143
try {
42-
URL url = FileLocator.toFileURL(getClass().getResource("/node_modules/vscode-css-languageserver/dist/node/cssServerMain.js"));
44+
URL url = FileLocator.toFileURL(
45+
getClass().getResource("/node_modules/vscode-css-languageserver/dist/node/cssServerMain.js"));
4346
commands.add(new java.io.File(url.getPath()).getAbsolutePath());
4447
commands.add("--stdio");
4548
setCommands(commands);
4649
setWorkingDirectory(System.getProperty("user.dir"));
4750
} catch (IOException e) {
48-
Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.getDefault().getBundle().getSymbolicName(), e.getMessage(), e));
51+
Activator.getDefault().getLog().log(
52+
new Status(IStatus.ERROR, Activator.getDefault().getBundle().getSymbolicName(), e.getMessage(), e));
4953
}
5054
}
5155

5256
@Override
53-
public String toString() {
54-
return "CSS Language Server: " + super.toString();
57+
protected Object createSettings() {
58+
// In HTML language server case, we don't need to get the settings when client
59+
// call didChangeConfiguration.
60+
// because HTML language server call configuration with a given uri to get
61+
// settings for a given uri.
62+
// The didChangeConfiguration call will just 'reset all document settings'
63+
// See
64+
// https://github.com/microsoft/vscode/blob/7bd27b4287b49e61a1cb49e18f370260144c8685/extensions/html-language-features/server/src/htmlServer.ts#L246
65+
return CSSPreferenceServerConstants.getGlobalSettings();
5566
}
56-
67+
5768
@Override
5869
public Object getInitializationOptions(URI rootUri) {
5970
Map<String, Object> settings = new HashMap<>();
60-
settings.put("css", Collections.singletonMap("validate", true));
61-
settings.put("scss", Collections.singletonMap("validate", true));
62-
settings.put("less", Collections.singletonMap("validate", true));
63-
// workaround https://github.com/microsoft/vscode/issues/79599
64-
settings.put("dataPaths", Collections.emptyList());
71+
settings.putAll(CSSPreferenceServerConstants.getGlobalSettings());
72+
settings.putAll(LESSPreferenceServerConstants.getGlobalSettings());
73+
settings.putAll(SCSSPreferenceServerConstants.getGlobalSettings());
74+
// Enable CSS formatter
75+
settings.put("provideFormatter", true);
6576
return settings;
6677
}
67-
78+
6879
@Override
69-
public void handleMessage(Message message, LanguageServer languageServer, URI rootUri) {
70-
if (message instanceof ResponseMessage responseMessage) {
71-
if (responseMessage.getResult() instanceof InitializeResult) {
72-
// enable validation: so far, no better way found than changing conf after init.
73-
DidChangeConfigurationParams params = new DidChangeConfigurationParams(getInitializationOptions(rootUri));
74-
languageServer.getWorkspaceService().didChangeConfiguration(params);
75-
}
76-
}
80+
public String toString() {
81+
return "CSS Language Server: " + super.toString();
7782
}
83+
7884
}

0 commit comments

Comments
 (0)