Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
3c6c035
Make the harness invoke typeWriter
JsonFreeman Aug 8, 2014
96fba4d
TypeWriter logic for identifiers
JsonFreeman Aug 11, 2014
12a0909
Add getTypeOfNode function to checker API
JsonFreeman Aug 13, 2014
6b778f1
Handle type declaration nodes
JsonFreeman Aug 13, 2014
537d878
Change getTypeOfNode to take an apparentType flag
JsonFreeman Aug 13, 2014
f4c0045
Print types for arbitrary expressions in typeWriter
JsonFreeman Aug 13, 2014
5574b58
Adjust TypeChecker to have separate method for getApparentType
JsonFreeman Aug 14, 2014
834a6f7
Add logic in checker for getting type of export assignments and imports
JsonFreeman Aug 15, 2014
14f9ed9
Only give to typeWriter files that were part of compiled program
JsonFreeman Aug 15, 2014
8d13a65
Fix test chainedImportAlias to use all of its file regions
JsonFreeman Aug 15, 2014
971a4c5
Remove problematic test (should be added back after issue #463 is fixed)
JsonFreeman Aug 15, 2014
91c1a81
Fix isTypeNode to not consider namespace accesses types
JsonFreeman Aug 15, 2014
27bf9b7
Accept type baselines
JsonFreeman Aug 15, 2014
f72ceab
Accept recent changes in typeWriter baselines
JsonFreeman Aug 18, 2014
dc44edf
Clean up local state after the describe callback for each compiler test
JsonFreeman Aug 18, 2014
d02d9bf
Merge branch 'master' into typeWriter
JsonFreeman Aug 18, 2014
58a99f3
Accept new typeWriter baseline
JsonFreeman Aug 18, 2014
a08aa14
Address PR feedback
JsonFreeman Aug 19, 2014
a8c2f82
Temporary fix for import case in getTypeOfNode
JsonFreeman Aug 19, 2014
f949c50
Merge branch 'master' into typeWriter
JsonFreeman Aug 19, 2014
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
321 changes: 253 additions & 68 deletions src/compiler/checker.ts

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions src/compiler/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,8 @@ module ts {
LastKeyword = StringKeyword,
FirstFutureReservedWord = ImplementsKeyword,
LastFutureReservedWord = YieldKeyword,
FirstTypeNode = TypeReference,
LastTypeNode = ArrayType,
FirstPunctuation= OpenBraceToken,
LastPunctuation = CaretEqualsToken
}
Expand Down Expand Up @@ -595,19 +597,17 @@ module ts {
getTypeCount(): number;
checkProgram(): void;
emitFiles(): EmitResult;
getSymbolOfNode(node: Node): Symbol;
getParentOfSymbol(symbol: Symbol): Symbol;
getTypeOfSymbol(symbol: Symbol): Type;
getDeclaredTypeOfSymbol(symbol: Symbol): Type;
getPropertiesOfType(type: Type): Symbol[];
getPropertyOfType(type: Type, propetyName: string): Symbol;
getSignaturesOfType(type: Type, kind: SignatureKind): Signature[];
getIndexTypeOfType(type: Type, kind: IndexKind): Type;
getReturnTypeOfSignature(signature: Signature): Type;
resolveEntityName(location: Node, name: EntityName, meaning: SymbolFlags): Symbol;
getSymbolsInScope(location: Node, meaning: SymbolFlags): Symbol[];
getSymbolInfo(node: Node): Symbol;
getTypeOfExpression(node: Expression, contextualType?: Type, contextualMapper?: TypeMapper): Type;
getTypeOfNode(node: Node): Type;
getApparentType(type: Type): ApparentType;
typeToString(type: Type, enclosingDeclaration?: Node, flags?: TypeFormatFlags): string;
symbolToString(symbol: Symbol, enclosingDeclaration?: Node, meaning?: SymbolFlags): string;
getAugmentedPropertiesOfApparentType(type: Type): Symbol[];
Expand Down
74 changes: 33 additions & 41 deletions src/harness/compilerRunner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,9 @@ class CompilerBaselineRunner extends RunnerBase {

public checkTestCodeOutput(fileName: string) {
describe('compiler tests for ' + fileName, () => {
// strips the fileName from the path.
var justName = fileName.replace(/^.*[\\\/]/, '');
// Mocha holds onto the closure environment of the describe callback even after the test is done.
// Everything declared here should be cleared out in the "after" callback.
var justName = fileName.replace(/^.*[\\\/]/, ''); // strips the fileName from the path.
var content = Harness.IO.readFile(fileName);
var testCaseContent = Harness.TestCaseParser.makeUnitsFromTest(content, fileName);

Expand All @@ -52,6 +53,7 @@ class CompilerBaselineRunner extends RunnerBase {
var rootDir = lastUnit.originalFilePath.indexOf('conformance') === -1 ? 'tests/cases/compiler/' : lastUnit.originalFilePath.substring(0, lastUnit.originalFilePath.lastIndexOf('/')) + '/';

var result: Harness.Compiler.CompilerResult;
var checker: ts.TypeChecker;
var options: ts.CompilerOptions;
// equivalent to the files that will be passed on the command line
var toBeCompiled: { unitName: string; content: string }[];
Expand Down Expand Up @@ -85,8 +87,10 @@ class CompilerBaselineRunner extends RunnerBase {
});
}

options = harnessCompiler.compileFiles(toBeCompiled, otherFiles, function (compileResult) {
options = harnessCompiler.compileFiles(toBeCompiled, otherFiles, function (compileResult, _checker) {
result = compileResult;
// The checker will be used by typeWriter
checker = _checker;
}, function (settings) {
harnessCompiler.setCompilerSettings(tcSettings);
});
Expand All @@ -97,6 +101,7 @@ class CompilerBaselineRunner extends RunnerBase {
a fresh compiler instance for themselves and then create a fresh one for the next test. Would be nice to get dev fixes
eventually to remove this limitation. */
for (var i = 0; i < tcSettings.length; ++i) {
// noImplicitAny is passed to getCompiler, but target is just passed in the settings blob to setCompilerSettings
if (!createNewInstance && (tcSettings[i].flag == "noimplicitany" || tcSettings[i].flag === 'target')) {
harnessCompiler = Harness.Compiler.getCompiler({
useExistingInstance: false,
Expand All @@ -118,6 +123,27 @@ class CompilerBaselineRunner extends RunnerBase {
}
});

after(() => {
// Mocha holds onto the closure environment of the describe callback even after the test is done.
// Therefore we have to clean out large objects after the test is done.
justName = undefined;
content = undefined;
testCaseContent = undefined;
units = undefined;
tcSettings = undefined;
lastUnit = undefined;
rootDir = undefined;
result = undefined;
checker = undefined;
options = undefined;
toBeCompiled = undefined;
otherFiles = undefined;
harnessCompiler = undefined;
declToBeCompiled = undefined;
declOtherFiles = undefined;
declResult = undefined;
});

function getByteOrderMarkText(file: Harness.Compiler.GeneratedFile): string {
return file.writeByteOrderMark ? "\u00EF\u00BB\u00BF" : "";
}
Expand Down Expand Up @@ -251,32 +277,15 @@ class CompilerBaselineRunner extends RunnerBase {

it('Correct type baselines for ' + fileName, () => {
// NEWTODO: Type baselines
if (/* ! */ false && /* ! */ result.errors.length === 0) {
if (result.errors.length === 0) {
Harness.Baseline.runBaseline('Correct expression types for ' + fileName, justName.replace(/\.ts/, '.types'), () => {
// TODO: Rewrite this part
//var compiler = new TypeScript.TypeScriptCompiler(
// new TypeScript.NullLogger(), TypeScript.ImmutableCompilationSettings.defaultSettings());

//compiler.addFile('lib.d.ts', TypeScript.ScriptSnapshot.fromString(Harness.Compiler.libTextMinimal),
// TypeScript.ByteOrderMark.None, /*version:*/ "0", /*isOpen:*/ true);

//var allFiles = toBeCompiled.concat(otherFiles);
//allFiles.forEach(file => {
// compiler.addFile(file.unitName, TypeScript.ScriptSnapshot.fromString(file.content),
// TypeScript.ByteOrderMark.None, /*version:*/ "0", /*isOpen:*/ true);
//});

var allFiles: any[] = [];
var compiler: any = undefined;

var typeBaselineText = '';
var allFiles = toBeCompiled.concat(otherFiles).filter(file => !!checker.getProgram().getSourceFile(file.unitName));
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Instead, assert that everything is referenced

var typeLines: string[] = [];
var typeMap: { [fileName: string]: { [lineNum: number]: string[]; } } = {};
var walker = new TypeWriterWalker(checker);
allFiles.forEach(file => {
var codeLines = file.content.split('\n');
var walker = new TypeWriterWalker(file.unitName, compiler);
walker.run();
walker.results.forEach(result => {
walker.getTypes(file.unitName).forEach(result => {
var formattedLine = result.identifierName + " : " + result.type;
if (!typeMap[file.unitName]) {
typeMap[file.unitName] = {};
Expand All @@ -290,23 +299,6 @@ class CompilerBaselineRunner extends RunnerBase {
typeMap[file.unitName][result.line] = typeInfo;
});

var typeBaselineText = '';
var typeLines: string[] = [];
var typeMap: { [fileName: string]: { [lineNum: number]: string[]; } } = {};
allFiles.forEach(file => {
var codeLines = file.content.split('\n');
var walker = new TypeWriterWalker(file.unitName, compiler);
walker.run();
walker.results.forEach(result => {
var formattedLine = result.identifierName + " : " + result.type;
if (!typeMap[file.unitName]) {
typeMap[file.unitName] = {};
} else {
typeLines.push('No type information for this code.');
}
});
});

typeLines.push('=== ' + file.unitName + ' ===\r\n');
for (var i = 0; i < codeLines.length; i++) {
var currentCodeLine = codeLines[i];
Expand Down
4 changes: 2 additions & 2 deletions src/harness/harness.ts
Original file line number Diff line number Diff line change
Expand Up @@ -609,7 +609,7 @@ module Harness {

public compileFiles(inputFiles: { unitName: string; content: string }[],
otherFiles: { unitName: string; content?: string }[],
onComplete: (result: CompilerResult) => void,
onComplete: (result: CompilerResult, checker: ts.TypeChecker) => void,
settingsCallback?: (settings: ts.CompilerOptions) => void,
options?: ts.CompilerOptions) {

Expand Down Expand Up @@ -755,7 +755,7 @@ module Harness {
var result = new CompilerResult(fileOutputs, errors, []);
// Covert the source Map data into the baseline
result.updateSourceMapRecord(program, emitResult ? emitResult.sourceMaps : undefined);
onComplete(result);
onComplete(result, checker);

// reset what newline means in case the last test changed it
sys.newLine = '\r\n';
Expand Down
Loading