Skip to content

Commit 32f9256

Browse files
committed
Reactivate compile on save + manage marker error. See
#109
1 parent ed254df commit 32f9256

File tree

7 files changed

+253
-64
lines changed

7 files changed

+253
-64
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package ts.core.tests;
2+
3+
import java.io.File;
4+
import java.util.List;
5+
6+
import ts.client.ITypeScriptServiceClient;
7+
import ts.client.LoggingInterceptor;
8+
import ts.client.TypeScriptServiceClient;
9+
import ts.client.compileonsave.CompileOnSaveAffectedFileListSingleProject;
10+
import ts.utils.FileUtils;
11+
12+
public class CompilerWithTsserverTest {
13+
14+
public static void main(String[] args) throws Exception {
15+
File projectDir = new File("./samples");
16+
// sample.ts has the following content:
17+
// var s = "";s.
18+
File sampleFile = new File(projectDir, "sample.ts");
19+
String fileName = FileUtils.getPath(sampleFile);
20+
21+
// Create TypeScript client
22+
ITypeScriptServiceClient client = new TypeScriptServiceClient(projectDir,
23+
new File("../ts.repository/node_modules/typescript/bin/tsserver"), null);
24+
25+
client.addInterceptor(LoggingInterceptor.getInstance());
26+
27+
client.openFile(fileName, null);
28+
29+
List<CompileOnSaveAffectedFileListSingleProject> projects = client.compileOnSaveAffectedFileList(fileName)
30+
.get();
31+
for (CompileOnSaveAffectedFileListSingleProject project : projects) {
32+
for (String file : project.getFileNames()) {
33+
Boolean result = client.compileOnSaveEmitFile(file, true).get();
34+
System.err.println(result);
35+
}
36+
}
37+
client.closeFile(fileName);
38+
39+
client.dispose();
40+
}
41+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ public List<String> createNodeArgs() {
169169
if (disableAutomaticTypingAcquisition) {
170170
args.add("--disableAutomaticTypingAcquisition");
171171
}
172-
//args.add("--useSingleInferredProject");
172+
// args.add("--useSingleInferredProject");
173173
return args;
174174
}
175175
}, TSSERVER_FILE_TYPE));

core/ts.core/src/ts/resources/jsonconfig/TsconfigJson.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public class TsconfigJson {
4747
private List<String> defaultExclude;
4848

4949
public TsconfigJson() {
50-
this.compileOnSave = true;
50+
this.compileOnSave = false;
5151
this.buildOnSave = false;
5252
}
5353

eclipse/json/ts.eclipse.ide.json.ui/src/ts/eclipse/ide/json/ui/internal/tsconfig/OverviewPage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ public void widgetSelected(SelectionEvent e) {
172172
Composite compileBuildOnSaveBody = toolkit.createComposite(body);
173173
compileBuildOnSaveBody.setLayout(new GridLayout());
174174
compileOnSave = createCheckbox(compileBuildOnSaveBody, TsconfigEditorMessages.OverviewPage_compileOnSave_label,
175-
new JSONPath("compileOnSave"), true);
175+
new JSONPath("compileOnSave"));
176176
buildOnSave = createCheckbox(compileBuildOnSaveBody, TsconfigEditorMessages.OverviewPage_buildOnSave_label,
177177
new JSONPath("buildOnSave"));
178178
updateCompileBuildOnSaveEnable(hasTypeScriptBuilder);

eclipse/ts.eclipse.ide.core/src/ts/eclipse/ide/core/builder/TypeScriptBuilder.java

Lines changed: 82 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
/**
2+
* Copyright (c) 2015-2017 Angelo ZERR.
3+
* All rights reserved. This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License v1.0
5+
* which accompanies this distribution, and is available at
6+
* http://www.eclipse.org/legal/epl-v10.html
7+
*
8+
* Contributors:
9+
* Angelo Zerr <[email protected]> - initial API and implementation
10+
*/
111
package ts.eclipse.ide.core.builder;
212

313
import java.util.ArrayList;
@@ -14,43 +24,28 @@
1424
import org.eclipse.core.resources.IncrementalProjectBuilder;
1525
import org.eclipse.core.runtime.CoreException;
1626
import org.eclipse.core.runtime.IProgressMonitor;
27+
import org.eclipse.core.runtime.IStatus;
28+
import org.eclipse.core.runtime.Status;
1729

1830
import ts.TypeScriptException;
1931
import ts.client.CommandNames;
20-
import ts.eclipse.ide.core.resources.IIDETypeScriptFile;
32+
import ts.eclipse.ide.core.TypeScriptCorePlugin;
2133
import ts.eclipse.ide.core.resources.IIDETypeScriptProject;
2234
import ts.eclipse.ide.core.resources.buildpath.ITsconfigBuildPath;
2335
import ts.eclipse.ide.core.resources.buildpath.ITypeScriptBuildPath;
2436
import ts.eclipse.ide.core.resources.jsconfig.IDETsconfigJson;
2537
import ts.eclipse.ide.core.utils.TypeScriptResourceUtil;
26-
import ts.eclipse.ide.core.utils.WorkbenchResourceUtil;
2738
import ts.eclipse.ide.internal.core.Trace;
2839

2940
/**
30-
* Builder to transpiles TypeScript files into JavaScript files and source map
31-
* if needed.
41+
* Builder to transpile TypeScript files into JavaScript files and source map if
42+
* needed.
3243
*
3344
*/
3445
public class TypeScriptBuilder extends IncrementalProjectBuilder {
3546

3647
public static final String ID = "ts.eclipse.ide.core.typeScriptBuilder";
3748

38-
// private static final ITypeScriptDiagnosticsCollector DIAGNOSTICS_COLLECTOR = new ITypeScriptDiagnosticsCollector() {
39-
//
40-
// @Override
41-
// public void addDiagnostic(String event, String filename, String text, int startLine, int startOffset,
42-
// int endLine, int endOffset, String category, int code) {
43-
// try {
44-
// IFile f = WorkbenchResourceUtil.findFileFromWorkspace(filename);
45-
// if (f != null && f.exists()) {
46-
// TypeScriptResourceUtil.addTscMarker(f, text, IMarker.SEVERITY_ERROR, startLine);
47-
// }
48-
// } catch (CoreException e) {
49-
// TypeScriptCorePlugin.logError(e);
50-
// }
51-
// }
52-
// };
53-
5449
@Override
5550
protected IProject[] build(int kind, Map<String, String> args, final IProgressMonitor monitor)
5651
throws CoreException {
@@ -90,6 +85,25 @@ private void fullBuild(IIDETypeScriptProject tsProject, IProgressMonitor monitor
9085

9186
private void incrementalBuild(IIDETypeScriptProject tsProject, IResourceDelta delta, IProgressMonitor monitor)
9287
throws CoreException {
88+
if (tsProject.canSupport(CommandNames.CompileOnSaveEmitFile)) {
89+
// compile with tsserver (since TypeScript 2.0.5)
90+
compileWithTsserver(tsProject, delta, monitor);
91+
} else {
92+
// compile with tsc (more slow than tsserver).
93+
compileWithTsc(tsProject, delta, monitor);
94+
}
95+
}
96+
97+
/**
98+
* Compile files with tsc.
99+
*
100+
* @param tsProject
101+
* @param delta
102+
* @param monitor
103+
* @throws CoreException
104+
*/
105+
private void compileWithTsc(IIDETypeScriptProject tsProject, IResourceDelta delta, IProgressMonitor monitor)
106+
throws CoreException {
93107

94108
final ITypeScriptBuildPath buildPath = tsProject.getTypeScriptBuildPath();
95109
final Map<ITsconfigBuildPath, List<IFile>> tsFilesToCompile = new HashMap<ITsconfigBuildPath, List<IFile>>();
@@ -153,7 +167,7 @@ private void addTsFile(final ITypeScriptBuildPath buildPath,
153167
if (!tsconfig.isBuildOnSave() && tsconfig.isCompileOnSave()
154168
&& tsProject.canSupport(CommandNames.CompileOnSaveEmitFile)) {
155169
// TypeScript >=2.0.5: compile is done with tsserver
156-
//compileWithTsserver(tsProject, tsFiles, tsconfig);
170+
// compileWithTsserver(tsProject, tsFiles, tsconfig);
157171
compileWithTsc(tsProject, tsFiles, tsconfig);
158172
} else {
159173
// TypeScript < 2.0.5: compile is done with tsc which is not
@@ -189,56 +203,64 @@ private void addTsFile(final ITypeScriptBuildPath buildPath,
189203
* @throws TypeScriptException
190204
* @throws CoreException
191205
*/
192-
public void compileWithTsc(IIDETypeScriptProject tsProject, List<IFile> tsFiles, IDETsconfigJson tsconfig)
206+
private void compileWithTsc(IIDETypeScriptProject tsProject, List<IFile> tsFiles, IDETsconfigJson tsconfig)
193207
throws TypeScriptException, CoreException {
194208
tsProject.getCompiler().compile(tsconfig, tsFiles);
195209
}
196210

197211
/**
198-
* Compile the given ts files with tsserver by consumming
199-
* "compileOnSaveEmitFile" tsserver command.
212+
* Compile files with tsserver (since TypeScript 2.0.5).
200213
*
201214
* @param tsProject
202-
* @param tsFiles
203-
* @param tsconfig
215+
* @param delta
216+
* @param monitor
204217
* @throws CoreException
205218
*/
206-
private void compileWithTsserver(IIDETypeScriptProject tsProject, List<IFile> tsFiles, IDETsconfigJson tsconfig)
207-
throws CoreException {
208-
for (final IFile file : tsFiles) {
209-
try {
210-
IIDETypeScriptFile tsFile = tsProject.getOpenedFile(file);
211-
// delete marker for the given ts file
212-
TypeScriptResourceUtil.deleteTscMarker(file);
213-
// compile the current ts file with "compileOnSaveEmitFile"
214-
tsFile.compileOnSaveEmitFile(null);
215-
// Refresh of js file, map file cannot work.
216-
// See
217-
TypeScriptResourceUtil.refreshAndCollectEmittedFiles(file, tsconfig, true, null);
218-
} catch (TypeScriptException e) {
219-
Trace.trace(Trace.SEVERE, "Error while tsserver compilation", e);
220-
}
221-
}
222-
223-
try {
224-
tsProject.geterrForProject(WorkbenchResourceUtil.getFileName(tsFiles.get(0)), 0).thenAccept(events -> {
225-
System.err.println(events);
226-
});
227-
} catch (TypeScriptException e) {
228-
// TODO Auto-generated catch block
229-
e.printStackTrace();
230-
}
231-
219+
private void compileWithTsserver(IIDETypeScriptProject tsProject, IResourceDelta delta, IProgressMonitor monitor)
220+
throws CoreException {
221+
222+
final List<IFile> updatedTsFiles = new ArrayList<>();
223+
final List<IFile> removedTsFiles = new ArrayList<>();
224+
delta.accept(new IResourceDeltaVisitor() {
225+
226+
@Override
227+
public boolean visit(IResourceDelta delta) throws CoreException {
228+
IResource resource = delta.getResource();
229+
if (resource == null) {
230+
return false;
231+
}
232+
switch (resource.getType()) {
233+
case IResource.ROOT:
234+
case IResource.FOLDER:
235+
return true;
236+
case IResource.PROJECT:
237+
return TypeScriptResourceUtil.isTypeScriptProject((IProject) resource);
238+
case IResource.FILE:
239+
if (!TypeScriptResourceUtil.isTsOrTsxFile(resource)) {
240+
return false;
241+
}
242+
int kind = delta.getKind();
243+
switch (kind) {
244+
case IResourceDelta.ADDED:
245+
case IResourceDelta.CHANGED:
246+
updatedTsFiles.add((IFile) resource);
247+
break;
248+
case IResourceDelta.REMOVED:
249+
removedTsFiles.add((IFile) resource);
250+
break;
251+
}
252+
return false;
253+
default:
254+
return false;
255+
}
256+
};
257+
});
258+
232259
try {
233-
tsProject.geterrForProject(WorkbenchResourceUtil.getFileName(tsFiles.get(0)), 0);
260+
tsProject.compileWithTsserver(updatedTsFiles, removedTsFiles, monitor);
234261
} catch (TypeScriptException e) {
235-
Trace.trace(Trace.SEVERE, "Error while tsserver compilation", e);
262+
throw new CoreException(new Status(IStatus.ERROR, TypeScriptCorePlugin.PLUGIN_ID,
263+
"Error while compiling with tsserver", e));
236264
}
237-
// try {
238-
// tsProject.getClient().projectInfo("", WorkbenchResourceUtil.getFileName(tsconfig.getTsconfigFile()), true);
239-
// } catch (TypeScriptException e) {
240-
// // TODO Auto-generated catch block
241-
// e.printStackTrace();
242-
// }
243265
}
244266
}

eclipse/ts.eclipse.ide.core/src/ts/eclipse/ide/core/resources/IIDETypeScriptProject.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@
1010
*/
1111
package ts.eclipse.ide.core.resources;
1212

13+
import java.util.List;
14+
15+
import org.eclipse.core.resources.IFile;
1316
import org.eclipse.core.resources.IProject;
1417
import org.eclipse.core.resources.IResource;
18+
import org.eclipse.core.runtime.IProgressMonitor;
1519
import org.eclipse.jface.text.IDocument;
1620

1721
import ts.TypeScriptException;
@@ -99,4 +103,12 @@ public interface IIDETypeScriptProject extends ITypeScriptProject {
99103

100104
IIDETypeScriptLint getTslint() throws TypeScriptException;
101105

106+
/**
107+
*
108+
* @param updatedTsFiles
109+
* @param removedTsFiles
110+
* @throws TypeScriptException
111+
*/
112+
void compileWithTsserver(List<IFile> updatedTsFiles, List<IFile> removedTsFiles, IProgressMonitor monitor) throws TypeScriptException;
113+
102114
}

0 commit comments

Comments
 (0)