Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ This page describes the noteworthy improvements provided by each release of Ecli

#### Editing improvements
* Bind schema/grammar (XSD, DTD, RelaxNG) with codelens in XML file
* UI preferences for TypeScript/ Javascript Inlay Hints

## 1.0.0

Expand Down
7 changes: 7 additions & 0 deletions org.eclipse.wildwebdeveloper/plugin.properties
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,13 @@ HTMLFormatPreferencePage.name=Format
HTMLHoverPreferencePage.name=Hover
HTMLValidationPreferencePage.name=Validation

# JST/TS
JSTSPreferencePage.name=JS/TS (Wild Web Developer)
TypeScriptPreferencePage.name=TypeScript
TypeScriptInlayHintPreferencePage.name=Inlay Hint
JavaScriptPreferencePage.name=JavaScript
JavaScriptInlayHintPreferencePage.name=Inlay Hint

# YAML
YAMLPreferencePage.name=YAML (Wild Web Developer)
YAMLCompletionPreferencePage.name=Completion
Expand Down
60 changes: 58 additions & 2 deletions org.eclipse.wildwebdeveloper/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -535,18 +535,22 @@
label="JavaScript-TypeScript Language Server">
</server>
<contentTypeMapping
languageId="javascript"
contentType="org.eclipse.wildwebdeveloper.js"
id="org.eclipse.wildwebdeveloper.jsts">
</contentTypeMapping>
<contentTypeMapping
languageId="typescript"
contentType="org.eclipse.wildwebdeveloper.ts"
id="org.eclipse.wildwebdeveloper.jsts">
</contentTypeMapping>
<contentTypeMapping
languageId="javascript"
contentType="org.eclipse.wildwebdeveloper.jsx"
id="org.eclipse.wildwebdeveloper.jsts">
</contentTypeMapping>
<contentTypeMapping
languageId="typescript"
contentType="org.eclipse.wildwebdeveloper.tsx"
id="org.eclipse.wildwebdeveloper.jsts">
</contentTypeMapping>
Expand Down Expand Up @@ -612,8 +616,7 @@
path="language-configurations/typescript/language-configuration.jsonc">
</languageConfiguration>
</extension>



<extension
point="org.eclipse.tm4e.ui.snippets">
<snippet
Expand All @@ -639,6 +642,59 @@
<icon contentType="org.eclipse.wildwebdeveloper.tsx" icon="icons/tsEditorIcon.png"/>
</extension>

<extension
id="JavaScriptPreferenceInitializer"
name="JavaScriptPreferenceInitializer"
point="org.eclipse.core.runtime.preferences">
<initializer
class="org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferenceInitializer">
</initializer>
</extension>

<extension
id="TypeScriptPreferenceInitializer"
name="TypeScriptPreferenceInitializer"
point="org.eclipse.core.runtime.preferences">
<initializer
class="org.eclipse.wildwebdeveloper.jsts.ui.preferences.typescript.TypeScriptPreferenceInitializer">
</initializer>
</extension>

<extension
point="org.eclipse.ui.preferencePages">
<page
class="org.eclipse.wildwebdeveloper.jsts.ui.preferences.JSTSPreferencePage"
id="org.eclipse.wildwebdeveloper.jsts.ui.preferences.JSTSPreferencePage"
name="%JSTSPreferencePage.name">
</page>
<!-- JavaScript -->
<page
category="org.eclipse.wildwebdeveloper.jsts.ui.preferences.JSTSPreferencePage"
class="org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferencePage"
id="org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferencePage"
name="%JavaScriptPreferencePage.name">
</page>
<page
category="org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferencePage"
class="org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptInlayHintPreferencePage"
id="org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptInlayHintPreferencePage"
name="%JavaScriptInlayHintPreferencePage.name">
</page>
<!-- TypeScript -->
<page
category="org.eclipse.wildwebdeveloper.jsts.ui.preferences.JSTSPreferencePage"
class="org.eclipse.wildwebdeveloper.jsts.ui.preferences.typescript.TypeScriptPreferencePage"
id="org.eclipse.wildwebdeveloper.jsts.ui.preferences.typescript.TypeScriptPreferencePage"
name="%TypeScriptPreferencePage.name">
</page>
<page
category="org.eclipse.wildwebdeveloper.jsts.ui.preferences.typescript.TypeScriptPreferencePage"
class="org.eclipse.wildwebdeveloper.jsts.ui.preferences.typescript.TypeScriptInlayHintPreferencePage"
id="org.eclipse.wildwebdeveloper.jsts.ui.preferences.typescript.TypeScriptInlayHintPreferencePage"
name="%TypeScriptInlayHintPreferencePage.name">
</page>
</extension>

<!-- Angular -->
<extension point="org.eclipse.lsp4e.languageServer">
<server
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,41 +25,78 @@
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.lsp4e.server.ProcessStreamConnectionProvider;
import org.eclipse.lsp4j.DidChangeConfigurationParams;
import org.eclipse.lsp4j.InitializeResult;
import org.eclipse.lsp4j.jsonrpc.messages.Message;
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage;
import org.eclipse.lsp4j.services.LanguageServer;
import org.eclipse.wildwebdeveloper.Activator;
import org.eclipse.wildwebdeveloper.embedder.node.NodeJSManager;
import org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferenceServerConstants;
import org.eclipse.wildwebdeveloper.jsts.ui.preferences.typescript.TypeScriptPreferenceServerConstants;
import org.eclipse.wildwebdeveloper.ui.preferences.ProcessStreamConnectionProviderWithPreference;

public class JSTSLanguageServer extends ProcessStreamConnectionProvider {
public class JSTSLanguageServer extends ProcessStreamConnectionProviderWithPreference {

private static final String JSTS_LANGUAGE_SERVER_ID = "org.eclipse.wildwebdeveloper.jsts";

private static final String[] SUPPORTED_SECTIONS = { "typescript", "javascript" };

public JSTSLanguageServer() {
super(JSTS_LANGUAGE_SERVER_ID, Activator.getDefault().getPreferenceStore(), SUPPORTED_SECTIONS);
List<String> commands = new ArrayList<>();
commands.add(NodeJSManager.getNodeJsLocation().getAbsolutePath());
try {
URL url = FileLocator.toFileURL(getClass().getResource("/node_modules/typescript-language-server/lib/cli.js"));
URL url = FileLocator
.toFileURL(getClass().getResource("/node_modules/typescript-language-server/lib/cli.js"));
commands.add(new File(url.getPath()).getAbsolutePath());
commands.add("--stdio");
URL nodeDependencies = FileLocator.toFileURL(getClass().getResource("/"));
setCommands(commands);
setWorkingDirectory(nodeDependencies.getPath()); //Required for typescript-eslint-language-service to find it's dependencies
setWorkingDirectory(nodeDependencies.getPath()); // Required for typescript-eslint-language-service to find
// it's dependencies

} catch (IOException e) {
Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.getDefault().getBundle().getSymbolicName(), e.getMessage(), e));
Activator.getDefault().getLog().log(
new Status(IStatus.ERROR, Activator.getDefault().getBundle().getSymbolicName(), e.getMessage(), e));
}
}

@Override
public Object getInitializationOptions(URI rootUri) {
Map<String, Object> options = new HashMap<>();
// plugins
List<TypeScriptPlugin> plugins = new ArrayList<>();
try {
// plugins.add(new TypeScriptPlugin("@angular/language-service"));
plugins.add(new TypeScriptPlugin("typescript-plugin-css-modules"));
plugins.add(new TypeScriptPlugin("typescript-lit-html-plugin"));
options.put("plugins", plugins.stream().map(TypeScriptPlugin::toMap).toArray());
} catch (IOException e) {
Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.getDefault().getBundle().getSymbolicName(), e.getMessage(), e));
Activator.getDefault().getLog().log(
new Status(IStatus.ERROR, Activator.getDefault().getBundle().getSymbolicName(), e.getMessage(), e));
}
return options;
}


@Override
protected Object createSettings() {
Map<String, Object> settings = new HashMap<>();
// javascript
settings.putAll(JavaScriptPreferenceServerConstants.getGlobalSettings());
// typescript
settings.putAll(TypeScriptPreferenceServerConstants.getGlobalSettings());
return settings;
}

@Override
public void handleMessage(Message message, LanguageServer languageServer, URI rootUri) {
if (message instanceof ResponseMessage responseMessage) {
if (responseMessage.getResult() instanceof InitializeResult) {
// enable validation: so far, no better way found than changing conf after init.
DidChangeConfigurationParams params = new DidChangeConfigurationParams(createSettings());
languageServer.getWorkspaceService().didChangeConfiguration(params);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*******************************************************************************
* Copyright (c) 2022 Red Hat Inc. and others.
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Angelo ZERR (Red Hat Inc.) - initial implementation
*******************************************************************************/
package org.eclipse.wildwebdeveloper.jsts.ui;

import org.eclipse.osgi.util.NLS;

/**
* JS/TS messages keys.
*
*/
public class Messages extends NLS {

// --------- TypeScript Inlay Hints preference page
public static String TypeScriptInlayHintPreferencePage_showInlayHintsFor_label;
public static String TypeScriptInlayHintPreferencePage_includeInlayEnumMemberValueHints;
public static String TypeScriptInlayHintPreferencePage_includeInlayFunctionLikeReturnTypeHints;
public static String TypeScriptInlayHintPreferencePage_includeInlayFunctionParameterTypeHints;
public static String TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints;
public static String TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints_none;
public static String TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints_literals;
public static String TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints_all;
public static String TypeScriptInlayHintPreferencePage_includeInlayParameterNameHintsWhenArgumentMatchesName;
public static String TypeScriptInlayHintPreferencePage_includeInlayPropertyDeclarationTypeHints;
public static String TypeScriptInlayHintPreferencePage_includeInlayVariableTypeHints;
public static String TypeScriptInlayHintPreferencePage_includeInlayVariableTypeHintsWhenTypeMatchesName;

static {
NLS.initializeMessages("org.eclipse.wildwebdeveloper.jsts.ui.messages", Messages.class); //$NON-NLS-1$
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#/*******************************************************************************
# * Copyright (c) 2022 Red Hat Inc. and others.
# * This program and the accompanying materials are made
# * available under the terms of the Eclipse Public License 2.0
# * which is available at https://www.eclipse.org/legal/epl-2.0/
# *
# * SPDX-License-Identifier: EPL-2.0
# *
# * Contributors:
# * Angelo ZERR (Red Hat Inc.) - initial implementation
# *******************************************************************************/

# TypeScript Inlay Hints preference page
TypeScriptInlayHintPreferencePage_showInlayHintsFor_label=Show inlay hints for:
TypeScriptInlayHintPreferencePage_includeInlayEnumMemberValueHints=member values in enum declarations.
TypeScriptInlayHintPreferencePage_includeInlayFunctionLikeReturnTypeHints=implicit return types on function signatures.
TypeScriptInlayHintPreferencePage_includeInlayFunctionParameterTypeHints=function parameter type.
TypeScriptInlayHintPreferencePage_includeInlayPropertyDeclarationTypeHints=property declaration type.
TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints=parameter names:
TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints_none=Disable parameter name hints.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints_none=Disable parameter name hints.
TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints_none=Never

TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints_literals=Only for literal arguments.
TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints_all=For literal and non-literal arguments.
TypeScriptInlayHintPreferencePage_includeInlayParameterNameHintsWhenArgumentMatchesName=also on arguments whose text is identical to the parameter name.
TypeScriptInlayHintPreferencePage_includeInlayVariableTypeHints=variable type.
TypeScriptInlayHintPreferencePage_includeInlayVariableTypeHintsWhenTypeMatchesName=also variables whose name is identical to the type name.
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*******************************************************************************
* Copyright (c) 2022 Red Hat Inc. and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Angelo ZERR (Red Hat Inc.) - initial implementation
*******************************************************************************/
package org.eclipse.wildwebdeveloper.jsts.ui.preferences;

import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.wildwebdeveloper.Activator;

/**
* JS/TS main preference page.
*
*/
public class JSTSPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

public JSTSPreferencePage() {
super(GRID);
}

@Override
public void init(IWorkbench workbench) {
setPreferenceStore(Activator.getDefault().getPreferenceStore());
}

@Override
protected void createFieldEditors() {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
/*******************************************************************************
* Copyright (c) 2022 Red Hat Inc. and others.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Angelo ZERR (Red Hat Inc.) - initial implementation
*******************************************************************************/
package org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript;

import static org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferenceServerConstants.JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_ENUM_MEMBER_VALUE_HINTS;
import static org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferenceServerConstants.JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_FUNCTION_LIKE_RETURN_TYPE_HINTS;
import static org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferenceServerConstants.JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_FUNCTION_PARAMETER_TYPE_HINTS;
import static org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferenceServerConstants.JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_PARAMETER_NAME_HINTS;
import static org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferenceServerConstants.JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_PARAMETER_NAME_HINTS_WHEN_ARGUMENT_MATCHES_NAME;
import static org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferenceServerConstants.JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_PROPERTY_DECLARATION_TYPE_HINTS;
import static org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferenceServerConstants.JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_VARIABLE_TYPE_HINTS;
import static org.eclipse.wildwebdeveloper.jsts.ui.preferences.javascript.JavaScriptPreferenceServerConstants.JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_VARIABLE_TYPE_HINTS_WHEN_TYPE_MATCHES_NAME;

import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.ComboFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.wildwebdeveloper.Activator;
import org.eclipse.wildwebdeveloper.jsts.ui.Messages;
import org.eclipse.wildwebdeveloper.ui.preferences.IndentedBooleanFieldEditor;

/**
* JavaScript Inlay Hint preference page.
*
*/
public class JavaScriptInlayHintPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

public JavaScriptInlayHintPreferencePage() {
super(GRID);
}

@Override
public void createFieldEditors() {
Composite parent = getFieldEditorParent();
Label label = new Label(parent, SWT.NONE);
label.setText(Messages.TypeScriptInlayHintPreferencePage_showInlayHintsFor_label);

addField(new BooleanFieldEditor(JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_ENUM_MEMBER_VALUE_HINTS,
Messages.TypeScriptInlayHintPreferencePage_includeInlayEnumMemberValueHints, parent));
addField(
new BooleanFieldEditor(JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_FUNCTION_LIKE_RETURN_TYPE_HINTS,
Messages.TypeScriptInlayHintPreferencePage_includeInlayFunctionLikeReturnTypeHints, parent));
addField(new BooleanFieldEditor(JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_FUNCTION_PARAMETER_TYPE_HINTS,
Messages.TypeScriptInlayHintPreferencePage_includeInlayFunctionParameterTypeHints, parent));
addField(
new BooleanFieldEditor(JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_PROPERTY_DECLARATION_TYPE_HINTS,
Messages.TypeScriptInlayHintPreferencePage_includeInlayPropertyDeclarationTypeHints, parent));

addField(new BooleanFieldEditor(JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_VARIABLE_TYPE_HINTS,
Messages.TypeScriptInlayHintPreferencePage_includeInlayVariableTypeHints, parent));
addField(new IndentedBooleanFieldEditor(
JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_VARIABLE_TYPE_HINTS_WHEN_TYPE_MATCHES_NAME,
Messages.TypeScriptInlayHintPreferencePage_includeInlayVariableTypeHintsWhenTypeMatchesName, parent));

addField(new ComboFieldEditor(JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_PARAMETER_NAME_HINTS,
Messages.TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints,
new String[][] {
{ Messages.TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints_none, "none" },
{ Messages.TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints_literals,
"literals" },
{ Messages.TypeScriptInlayHintPreferencePage_includeInlayParameterNameHints_all, "all" } },
parent));
addField(new IndentedBooleanFieldEditor(
JAVASCRIPT_PREFERENCES_INLAY_HINTS_INCLUDE_INLAY_PARAMETER_NAME_HINTS_WHEN_ARGUMENT_MATCHES_NAME,
Messages.TypeScriptInlayHintPreferencePage_includeInlayParameterNameHintsWhenArgumentMatchesName,
parent));
}


@Override
public void init(IWorkbench workbench) {
setPreferenceStore(Activator.getDefault().getPreferenceStore());
}
}
Loading