Skip to content

Commit 435c445

Browse files
author
angelozerr
committed
Fix #58
1 parent a0be51b commit 435c445

File tree

40 files changed

+4452
-271
lines changed

40 files changed

+4452
-271
lines changed

core/ts.core/src/ts/client/ITypeScriptServiceClient.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import ts.client.quickinfo.ITypeScriptQuickInfoCollector;
2222
import ts.client.references.ITypeScriptReferencesCollector;
2323
import ts.client.signaturehelp.ITypeScriptSignatureHelpCollector;
24+
import ts.internal.client.protocol.ConfigureRequestArguments;
2425

2526
/**
2627
* TypeScript client API which communicates with tsserver.
@@ -81,4 +82,6 @@ void occurrences(String fileName, int line, int offset, ITypeScriptOccurrencesCo
8182

8283
boolean isDisposed();
8384

85+
void configure(ConfigureRequestArguments arguments) throws TypeScriptException;
86+
8487
}

core/ts.core/src/ts/client/TypeScriptServiceClient.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
import ts.internal.client.protocol.CloseRequest;
4646
import ts.internal.client.protocol.CompletionDetailsRequest;
4747
import ts.internal.client.protocol.CompletionsRequest;
48+
import ts.internal.client.protocol.ConfigureRequest;
49+
import ts.internal.client.protocol.ConfigureRequestArguments;
4850
import ts.internal.client.protocol.DefinitionRequest;
4951
import ts.internal.client.protocol.FormatRequest;
5052
import ts.internal.client.protocol.GeterrRequest;
@@ -206,6 +208,15 @@ public void quickInfo(String fileName, int line, int offset, ITypeScriptQuickInf
206208
execute(request);
207209
}
208210

211+
// ---------------- Configure
212+
213+
@Override
214+
public void configure(ConfigureRequestArguments arguments)
215+
throws TypeScriptException {
216+
ConfigureRequest request = new ConfigureRequest(arguments);
217+
execute(request);
218+
}
219+
209220
@Override
210221
public void changeFile(String fileName, int line, int offset, int endLine, int endOffset, String newText)
211222
throws TypeScriptException {
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package ts.client.format;
2+
3+
import com.eclipsesource.json.JsonObject;
4+
5+
import ts.utils.JsonHelper;
6+
7+
/**
8+
* Editor Options
9+
*
10+
* @see https://github.com/Microsoft/TypeScript/blob/master/src/server/protocol.
11+
* d.ts
12+
*/
13+
public class EditorOptions extends JsonObject {
14+
15+
public Integer getTabSize() {
16+
return JsonHelper.getInteger(this, "tabSize");
17+
}
18+
19+
public void setTabSize(Integer tabSize) {
20+
super.set("tabSize", tabSize);
21+
}
22+
23+
public Integer getIndentSize() {
24+
return JsonHelper.getInteger(this, "indentSize");
25+
}
26+
27+
public void setIndentSize(Integer indentSize) {
28+
super.set("indentSize", indentSize);
29+
}
30+
31+
public String getNewLineCharacter() {
32+
return super.getString("newLineCharacter", null);
33+
}
34+
35+
public void setNewLineCharacter(String newLineCharacter) {
36+
super.set("newLineCharacter", newLineCharacter);
37+
}
38+
39+
public Boolean getConvertTabsToSpaces() {
40+
return JsonHelper.getBoolean(this, "convertTabsToSpaces");
41+
}
42+
43+
public void setConvertTabsToSpaces(Boolean convertTabsToSpaces) {
44+
super.set("convertTabsToSpaces", convertTabsToSpaces);
45+
}
46+
47+
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package ts.client.format;
2+
3+
import ts.utils.JsonHelper;
4+
5+
public class FormatOptions extends EditorOptions {
6+
7+
public Boolean getInsertSpaceAfterCommaDelimiter() {
8+
return JsonHelper.getBoolean(this, "insertSpaceAfterCommaDelimiter");
9+
}
10+
11+
public void setInsertSpaceAfterCommaDelimiter(Boolean insertSpaceAfterCommaDelimiter) {
12+
super.set("insertSpaceAfterCommaDelimiter", insertSpaceAfterCommaDelimiter);
13+
}
14+
15+
public Boolean getInsertSpaceAfterSemicolonInForStatements() {
16+
return JsonHelper.getBoolean(this, "insertSpaceAfterSemicolonInForStatements");
17+
}
18+
19+
public void setInsertSpaceAfterSemicolonInForStatements(Boolean insertSpaceAfterSemicolonInForStatements) {
20+
super.set("insertSpaceAfterSemicolonInForStatements", insertSpaceAfterSemicolonInForStatements);
21+
}
22+
23+
public Boolean getInsertSpaceBeforeAndAfterBinaryOperators() {
24+
return JsonHelper.getBoolean(this, "insertSpaceBeforeAndAfterBinaryOperators");
25+
}
26+
27+
public void setInsertSpaceBeforeAndAfterBinaryOperators(Boolean insertSpaceBeforeAndAfterBinaryOperators) {
28+
super.set("insertSpaceBeforeAndAfterBinaryOperators", insertSpaceBeforeAndAfterBinaryOperators);
29+
}
30+
31+
public Boolean getInsertSpaceAfterKeywordsInControlFlowStatements() {
32+
return JsonHelper.getBoolean(this, "insertSpaceAfterKeywordsInControlFlowStatements");
33+
}
34+
35+
public void setInsertSpaceAfterKeywordsInControlFlowStatements(
36+
Boolean insertSpaceAfterKeywordsInControlFlowStatements) {
37+
super.set("insertSpaceAfterKeywordsInControlFlowStatements", insertSpaceAfterKeywordsInControlFlowStatements);
38+
}
39+
40+
public Boolean getInsertSpaceAfterFunctionKeywordForAnonymousFunctions() {
41+
return JsonHelper.getBoolean(this, "insertSpaceAfterFunctionKeywordForAnonymousFunctions");
42+
}
43+
44+
public void setInsertSpaceAfterFunctionKeywordForAnonymousFunctions(
45+
Boolean insertSpaceAfterFunctionKeywordForAnonymousFunctions) {
46+
super.set("insertSpaceAfterFunctionKeywordForAnonymousFunctions",
47+
insertSpaceAfterFunctionKeywordForAnonymousFunctions);
48+
}
49+
50+
public Boolean getInsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis() {
51+
return JsonHelper.getBoolean(this, "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis");
52+
}
53+
54+
public void setInsertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis(
55+
Boolean insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis) {
56+
super.set("insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis",
57+
insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis);
58+
}
59+
60+
public Boolean getInsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets() {
61+
return JsonHelper.getBoolean(this, "insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets");
62+
}
63+
64+
public void setInsertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets(
65+
Boolean insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets) {
66+
super.set("insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets",
67+
insertSpaceAfterOpeningAndBeforeClosingNonemptyBrackets);
68+
}
69+
70+
public Boolean getPlaceOpenBraceOnNewLineForFunctions() {
71+
return JsonHelper.getBoolean(this, "placeOpenBraceOnNewLineForFunctions");
72+
}
73+
74+
public void setPlaceOpenBraceOnNewLineForFunctions(Boolean placeOpenBraceOnNewLineForFunctions) {
75+
super.set("placeOpenBraceOnNewLineForFunctions", placeOpenBraceOnNewLineForFunctions);
76+
}
77+
78+
public Boolean getPlaceOpenBraceOnNewLineForControlBlocks() {
79+
return JsonHelper.getBoolean(this, "placeOpenBraceOnNewLineForControlBlocks");
80+
}
81+
82+
public void setPlaceOpenBraceOnNewLineForControlBlocks(Boolean placeOpenBraceOnNewLineForControlBlocks) {
83+
super.set("placeOpenBraceOnNewLineForControlBlocks", placeOpenBraceOnNewLineForControlBlocks);
84+
}
85+
86+
}

core/ts.core/src/ts/internal/client/protocol/CommandNames.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ public enum CommandNames {
1818

1919
Open("open"), Close("close"), Change("change"), NavBar("navbar"), Completions(
2020
"completions"), CompletionEntryDetails("completionEntryDetails"), Reload("reload"), Definition(
21-
"definition"), SignatureHelp("signatureHelp"), QuickInfo("quickinfo"), Geterr(
22-
"geterr"), Format("format"), References("references"), Occurrences("occurrences");
21+
"definition"), SignatureHelp("signatureHelp"), QuickInfo("quickinfo"), Geterr("geterr"), Format(
22+
"format"), References("references"), Occurrences("occurrences"), Configure("configure");
2323

2424
private final String name;
2525

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package ts.internal.client.protocol;
2+
3+
import com.eclipsesource.json.JsonObject;
4+
5+
import ts.TypeScriptException;
6+
7+
public class ConfigureRequest extends SimpleRequest {
8+
9+
public ConfigureRequest(ConfigureRequestArguments arguments) {
10+
super(CommandNames.Configure, arguments, null);
11+
}
12+
13+
@Override
14+
public void collect(JsonObject response) throws TypeScriptException {
15+
16+
}
17+
18+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package ts.internal.client.protocol;
2+
3+
import com.eclipsesource.json.JsonObject;
4+
import com.eclipsesource.json.JsonValue;
5+
6+
import ts.client.format.FormatOptions;
7+
8+
/**
9+
* Information found in a configure request.
10+
*/
11+
public class ConfigureRequestArguments extends JsonObject {
12+
13+
public ConfigureRequestArguments(FormatOptions formatOptions, String file) {
14+
setFile(file);
15+
setFormatOptions(formatOptions);
16+
}
17+
18+
/**
19+
* Information about the host, for example 'Emacs 24.4' or 'Sublime Text
20+
* version 3075'
21+
*/
22+
public String getHostInfo() {
23+
return super.getString("hostInfo", null);
24+
}
25+
26+
/**
27+
* If present, tab settings apply only to this file.
28+
*/
29+
public String getFile() {
30+
return super.getString("file", null);
31+
}
32+
33+
public void setFile(String file) {
34+
super.set("file", file);
35+
}
36+
37+
/**
38+
* The format options to use during formatting and other code editing
39+
* features.
40+
*/
41+
public FormatOptions getFormatOptions() {
42+
JsonValue value = super.get("formatOptions");
43+
return value != null ? (FormatOptions) value.asObject() : null;
44+
}
45+
46+
public void setFormatOptions(FormatOptions formatOptions) {
47+
super.set("formatOptions", formatOptions);
48+
}
49+
}

core/ts.core/src/ts/internal/client/protocol/EditorOptions.java

Lines changed: 0 additions & 29 deletions
This file was deleted.

core/ts.core/src/ts/resources/AbstractTypeScriptFile.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@
1919
import ts.client.Location;
2020
import ts.client.completions.ITypeScriptCompletionCollector;
2121
import ts.client.definition.ITypeScriptDefinitionCollector;
22+
import ts.client.format.FormatOptions;
2223
import ts.client.format.ITypeScriptFormatCollector;
2324
import ts.client.navbar.ITypeScriptNavBarCollector;
2425
import ts.client.navbar.NavigationBarItem;
2526
import ts.client.occurrences.ITypeScriptOccurrencesCollector;
2627
import ts.client.references.ITypeScriptReferencesCollector;
2728
import ts.internal.LocationReader;
29+
import ts.internal.client.protocol.ConfigureRequestArguments;
2830

2931
/**
3032
* Abstract TypeScript file.
@@ -40,12 +42,15 @@ public abstract class AbstractTypeScriptFile implements ITypeScriptFile {
4042
private final List<INavbarListener> listeners;
4143
private List<NavigationBarItem> navbar;
4244
private TypeScriptNavBarCollector navBarCollector;
45+
private FormatOptions formatOptions;
46+
private boolean configureAlreadyDone;
4347

4448
public AbstractTypeScriptFile(ITypeScriptProject tsProject) {
4549
this.tsProject = tsProject;
4650
this.listeners = new ArrayList<INavbarListener>();
4751
this.navBarCollector = new TypeScriptNavBarCollector();
4852
this.setDirty(false);
53+
this.configureAlreadyDone = false;
4954
}
5055

5156
@Override
@@ -125,11 +130,31 @@ public void format(int startPosition, int endPosition, ITypeScriptFormatCollecto
125130
throws TypeScriptException {
126131
this.synch();
127132
ITypeScriptServiceClient client = tsProject.getClient();
133+
this.ensureFormatOptions(client);
128134
Location start = this.getLocation(startPosition);
129135
Location end = this.getLocation(endPosition);
130136
client.format(this.getName(), start.getLine(), start.getOffset(), end.getLine(), end.getOffset(), collector);
131137
}
132138

139+
private void ensureFormatOptions(ITypeScriptServiceClient client) throws TypeScriptException {
140+
FormatOptions oldFormatOptions = formatOptions;
141+
FormatOptions newFormatOptions = getFormatOptions();
142+
if (!configureAlreadyDone || !newFormatOptions.equals(oldFormatOptions)) {
143+
configureAlreadyDone = true;
144+
client.configure(new ConfigureRequestArguments(newFormatOptions, getName()));
145+
}
146+
}
147+
148+
@Override
149+
public FormatOptions getFormatOptions() {
150+
formatOptions = tsProject.getProjectSettings().getFormatOptions();
151+
return formatOptions;
152+
}
153+
154+
public void setFormatOptions(FormatOptions formatOptions) {
155+
this.formatOptions = formatOptions;
156+
}
157+
133158
@Override
134159
public void references(int position, ITypeScriptReferencesCollector collector) throws TypeScriptException {
135160
this.synch();

core/ts.core/src/ts/resources/BasicTypeScriptProjectSettings.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import ts.TypeScriptException;
1616
import ts.client.completions.ICompletionEntryMatcher;
17+
import ts.client.format.FormatOptions;
1718
import ts.cmd.tslint.TslintSettingsStrategy;
1819
import ts.internal.repository.TypeScriptRepository;
1920
import ts.repository.ITypeScriptRepository;
@@ -101,4 +102,10 @@ public boolean isUseCodeSnippetsOnMethodSuggest() {
101102
public void dispose() {
102103
// Do nothing
103104
}
105+
106+
@Override
107+
public FormatOptions getFormatOptions() {
108+
// TODO Auto-generated method stub
109+
return null;
110+
}
104111
}

0 commit comments

Comments
 (0)