Skip to content
This repository has been archived by the owner on Mar 25, 2021. It is now read-only.

Commit

Permalink
Merge pull request #947 from OutSystems/msbuild-formatter
Browse files Browse the repository at this point in the history
Adding new msbuild compatible formatter
  • Loading branch information
adidahiya committed Jan 31, 2016
2 parents e5b5ff1 + d5f74e1 commit e3476a7
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# lint files can't get an extra \r character before \n, otherwise
# they'll make some rule tests fail on windows, due to the lint error
# being reported to be 1 character longer

*.lint text eol=lf
34 changes: 34 additions & 0 deletions src/formatters/msbuildFormatter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/**
* @license
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import {AbstractFormatter} from "../language/formatter/abstractFormatter";
import {RuleFailure} from "../language/rule/rule";

export class Formatter extends AbstractFormatter {
public format(failures: RuleFailure[]): string {
const outputLines = failures.map((failure: RuleFailure) => {
const fileName = failure.getFileName();
const failureString = failure.getFailure();

const lineAndCharacter = failure.getStartPosition().getLineAndCharacter();
const positionTuple = `(${lineAndCharacter.line + 1},${lineAndCharacter.character + 1})`;

return `${fileName}${positionTuple}: warning: ${failureString}`;
});

return outputLines.join("\n") + "\n";
}
}
1 change: 1 addition & 0 deletions src/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
"tslint.ts",
"formatters/index.ts",
"formatters/jsonFormatter.ts",
"formatters/msbuildFormatter.ts",
"formatters/pmdFormatter.ts",
"formatters/proseFormatter.ts",
"formatters/verboseFormatter.ts",
Expand Down
9 changes: 9 additions & 0 deletions test/files/formatters/msbuildFormatter.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module ProseModule {
export class ProseClass {
private name: string;

constructor(name: string) {
this.name = name;
}
}
}
57 changes: 57 additions & 0 deletions test/formatters/msbuildFormatterTests.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* Copyright 2013 Palantir Technologies, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import * as ts from "typescript";
import {IFormatter, RuleFailure, TestUtils} from "../lint";

describe("MSBuild Formatter", () => {
const TEST_FILE = "formatters/msbuildFormatter.test.ts";
let sourceFile: ts.SourceFile;
let formatter: IFormatter;

before(() => {
const Formatter = TestUtils.getFormatter("msbuild");
sourceFile = TestUtils.getSourceFile(TEST_FILE);
formatter = new Formatter();
});

it("formats failures", () => {
const maxPosition = sourceFile.getFullWidth();

const failures = [
new RuleFailure(sourceFile, 0, 1, "first failure", "first-name"),
new RuleFailure(sourceFile, 32, 36, "mid failure", "mid-name"),
new RuleFailure(sourceFile, maxPosition - 1, maxPosition, "last failure", "last-name")
];

const expectedResult =
getFailureString(TEST_FILE, 1, 1, "first failure") +
getFailureString(TEST_FILE, 2, 12, "mid failure") +
getFailureString(TEST_FILE, 9, 2, "last failure");

const actualResult = formatter.format(failures);
assert.equal(actualResult, expectedResult);
});

it("handles no failures", () => {
const result = formatter.format([]);
assert.equal(result, "\n");
});

function getFailureString(file: string, line: number, character: number, reason: string) {
return `${file}(${line},${character}): warning: ${reason}\n`;
}
});
2 changes: 2 additions & 0 deletions test/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
"../src/formatters.ts",
"../src/formatters/index.ts",
"../src/formatters/jsonFormatter.ts",
"../src/formatters/msbuildFormatter.ts",
"../src/formatters/pmdFormatter.ts",
"../src/formatters/proseFormatter.ts",
"../src/formatters/verboseFormatter.ts",
Expand Down Expand Up @@ -125,6 +126,7 @@
"utils.ts",
"formatters/externalFormatterTest.ts",
"formatters/jsonFormatterTests.ts",
"formatters/msbuildFormatterTests.ts",
"formatters/pmdFormatterTests.ts",
"formatters/proseFormatterTests.ts",
"formatters/verboseFormatterTests.ts",
Expand Down

0 comments on commit e3476a7

Please sign in to comment.