GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Codefix for removing Unused Identifiers by paulvanbrenk · Pull Request #11546 · microsoft/TypeScript

Conversation

@paulvanbrenk

@paulvanbrenk Paul van Brenk (paulvanbrenk) commented Oct 12, 2016 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

Quick fix for removing unused variables and unused locals.

Current known limitations:

  • no support for the spread operator
  • no support for the for ... in loop

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Paul van Brenk added 2 commits October 11, 2016 15:04
Paul van Brenk
Codefixes for unused variables, properties etc.
05ec512
Paul van Brenk
Merge branch 'pvb/codeaction/api' into unusedidentifier
28c08fd
@msftclas Microsoft Contribution License Agreements (msftclas) added the cla-not-required label Oct 12, 2016
mhegazy
Mohamed Hegazy (mhegazy) suggested changes Oct 13, 2016
View reviewed changes
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
const start = context.span.start;
const token = getTokenAtPosition(sourceFile, start);

if (token.kind === ts.SyntaxKind.Identifier) {

@mhegazy Mohamed Hegazy (mhegazy) Oct 12, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

please refactor this into a switch statement.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Oct 21, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

done

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
return createCodeFix("{}", token.parent.pos, token.parent.end - token.parent.pos);
}

if (token.parent.kind === SyntaxKind.ImportEqualsDeclaration) {

@mhegazy Mohamed Hegazy (mhegazy) Oct 12, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

what does this mean. this is import m = require("mod");, you want to remove the whole declaration, and not just the identifier.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@mhegazy Mohamed Hegazy (mhegazy) Oct 12, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Also, please add a test for this.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Oct 22, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

This is import a = A

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Oct 24, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Tests are here, changed this to remove the whole line.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
}

if (token.kind === SyntaxKind.AsteriskToken && token.parent.kind === SyntaxKind.NamespaceImport) {
return createCodeFix("{}", token.parent.pos, token.parent.end - token.parent.pos);

@mhegazy Mohamed Hegazy (mhegazy) Oct 12, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

do not think this is correct either. you need to check if this is the only import for this module, remove it whole sale, if not, remove whole import declaration.

also please add tests for the deffrent combinations of import:

import * as ns from "mod";

import d from "mod"

import {a, b} from "mod" // where both are unused
import {a, b} from "mod" // where only one is unused

import d, * as ns from "mod"; // where both are unused
import d, * as ns from "mod"; // where one of them is unsued, but the other is

import d, {a, b} from "mod"; // where one of a,b, or d is unused, but other are not
import d, {a, b} from "mod"; // where both a and b are unused, but d is not
import d, {a, b} from "mod"; // where only d is unsued
import d, {a, b} from "mod"; // where all are unused

import m = require("mod");

import m = n.a;

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Oct 25, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Since the cases where more than 1 import are unused, will result in 2 errors, and 2 fixes; so those would be identical to the single unused import.

All other cases have test cases.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread tests/cases/fourslash/unusedParameterInConstructor1.ts
//// [|constructor(private p1: string, public p2: boolean, public p3: any, p5)|] { p5; }
//// }

verify.codeFixAtPosition("constructor(public p2: boolean, public p3: any, p5)"); No newline at end of file

@mhegazy Mohamed Hegazy (mhegazy) Oct 12, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

please add another test with private readonly and another one with private is not in the first position.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Oct 21, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

added

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
const elements = namedImports.elements;
if (elements.length === 1) {
// Only 1 import and it is unused. So the entire line could be removed.
return createCodeFix("", token.parent.pos, token.parent.end - token.parent.pos);

@mhegazy Mohamed Hegazy (mhegazy) Oct 12, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

this is not removing the whole line? do you mean namedImports.parent? I think you need to handle all cases. i have listed them below, also please add tests for each combination.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
}

if (token.parent.kind === SyntaxKind.TypeParameter) {
const typeParameters = (<ClassDeclaration>token.parent.parent).typeParameters;

@mhegazy Mohamed Hegazy (mhegazy) Oct 12, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

why ClassDeclaraton? that can be function, interface declaration, method, type alias, arrow function, etc.. please add tests for these.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Oct 21, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Used DeclWIthTypeParam, tests were already there.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
}

if (token.parent.kind === ts.SyntaxKind.Parameter) {
const functionDeclaration = <FunctionDeclaration>token.parent.parent;

@mhegazy Mohamed Hegazy (mhegazy) Oct 12, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

this is the same logic as above, please merge these two branches.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Oct 21, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

done

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
token.parent.kind === SyntaxKind.MethodDeclaration ||
token.parent.kind === SyntaxKind.ModuleDeclaration ||
token.parent.kind === SyntaxKind.PropertyDeclaration ||
token.parent.kind === SyntaxKind.ArrowFunction) {

@mhegazy Mohamed Hegazy (mhegazy) Oct 12, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

how can an arrowFunction have an identifier as a name?

consider changing this to:

if (isDeclaration(token.parent) && (<Declaration>parent).name === token) {
    return createCodeFix("", token.parent.pos, token.parent.end - token.parent.pos);
}

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@mhegazy Mohamed Hegazy (mhegazy) Oct 13, 2016 •
edited by paulvanbrenk
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Also please add handeling for computed properties with non-identifier names:

class C {
    private ["string"] (){}
    private [Symbol.Iterator]() {}
}

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
mhegazy
Mohamed Hegazy (mhegazy) suggested changes Oct 13, 2016
View reviewed changes
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
else if (token.parent.parent.parent.kind === SyntaxKind.ForInStatement) {
const forInStatement = <ForInStatement>token.parent.parent.parent;
const initializer = <VariableDeclarationList>forInStatement.initializer;
return createCodeFix("{}", initializer.declarations[0].pos, initializer.declarations[0].end - initializer.declarations[0].pos);

@mhegazy Mohamed Hegazy (mhegazy) Oct 13, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

this is not valid for..in statement. we should switch it x to _x and add special casing for _x to be not show the error. alternatively do nothing here, which would be my recommendation.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Oct 22, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Doing nothing, modified test to make sure.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
}
else {
const variableStatement = <VariableStatement>token.parent.parent.parent;
if (variableStatement.declarationList.declarations.length === 1) {

@mhegazy Mohamed Hegazy (mhegazy) Oct 13, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

consider sharing the logic here with the other list removal cases.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Oct 21, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

done

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
if (token.parent.parent.parent.kind === SyntaxKind.ForStatement) {
const forStatement = <ForStatement>token.parent.parent.parent;
const initializer = <VariableDeclarationList>forStatement.initializer;
if (initializer.declarations.length === 1) {

@mhegazy Mohamed Hegazy (mhegazy) Oct 13, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

consider merging this into a list removal logic for all of the cases below.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Oct 21, 2016 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

done

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
}
}
}
}

@mhegazy Mohamed Hegazy (mhegazy) Oct 13, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

what about binding patterns? can you add tests for these cases. both for parameters and variable declarations.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
token.parent.kind === SyntaxKind.MethodDeclaration ||
token.parent.kind === SyntaxKind.ModuleDeclaration ||
token.parent.kind === SyntaxKind.PropertyDeclaration ||
token.parent.kind === SyntaxKind.ArrowFunction) {

@mhegazy Mohamed Hegazy (mhegazy) Oct 13, 2016 •
edited by paulvanbrenk
Loading

Uh oh!

There was an error while loading. Please reload this page.

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Also please add handeling for computed properties with non-identifier names:

class C {
    private ["string"] (){}
    private [Symbol.Iterator]() {}
}

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Paul van Brenk added 3 commits October 21, 2016 14:56
Paul van Brenk
Major refactoring after PR feedback
03a6eeb
Paul van Brenk
Add tests for different constructor parameter cases.
79fa9db
Paul van Brenk
Remove unused case, and fix for..in
1f94e14
RyanCavanaugh
Ryan Cavanaugh (RyanCavanaugh) reviewed Oct 24, 2016
View reviewed changes
Comment thread tests/cases/fourslash/unusedLocalsInFunction2.ts Outdated
//// x++;
////}

verify.codeFixAtPosition("var x;", 6133);

@RyanCavanaugh Ryan Cavanaugh (RyanCavanaugh) Oct 24, 2016

Copy link
Copy Markdown
Member

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

No error codes in fourslash tests

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Paul van Brenk added 2 commits October 24, 2016 11:40
Paul van Brenk
Fix 'import a = A' case
4097874
Paul van Brenk
Simplifying handling import cases
d4b99d6
mhegazy
Mohamed Hegazy (mhegazy) suggested changes Oct 26, 2016
View reviewed changes
Comment thread src/services/codefixes/unusedIdentifierFixes.ts
break;

case SyntaxKind.ForInStatement:
// There is no valid fix in the case of:

@mhegazy Mohamed Hegazy (mhegazy) Oct 26, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

rename the variable to start with _.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Nov 7, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Out of scope, will add for 2nd iteration of this fix

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
}
}

case SyntaxKind.FunctionDeclaration:

@mhegazy Mohamed Hegazy (mhegazy) Oct 26, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

namespace, type alais, and enum as well

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@mhegazy Mohamed Hegazy (mhegazy) Oct 26, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

i would move this to the default clause and use isDeclarationName

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Nov 1, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

done

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
case SyntaxKind.ImportSpecifier:
const namedImports = <NamedImports>token.parent.parent;
const elements = namedImports.elements;
if (elements.length === 1) {

@mhegazy Mohamed Hegazy (mhegazy) Oct 26, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

if no other imports in this list we need to remove the whole module import.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
}
break;

case SyntaxKind.PrivateKeyword:

@mhegazy Mohamed Hegazy (mhegazy) Oct 26, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

When is this ever used?

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Nov 1, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

removed

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts
const token = getTokenAtPosition(sourceFile, start);

switch (token.kind) {
case ts.SyntaxKind.Identifier:

@mhegazy Mohamed Hegazy (mhegazy) Oct 26, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

binding patterns are not handled anywhere:

function f({a, b}) {}

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Nov 1, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

outside of scope, I think we can do a better job when we add the change signature refactoring

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts
const token = getTokenAtPosition(sourceFile, start);

switch (token.kind) {
case ts.SyntaxKind.Identifier:

@mhegazy Mohamed Hegazy (mhegazy) Oct 26, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Also please add handeling for computed properties with non-identifier names:

class C {
    private ["string"] (){}
    private [Symbol.Iterator]() {}
}

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread tests/cases/fourslash/unusedImports12FS.ts

// @noUnusedLocals: true
// @Filename: file2.ts
//// [| import f1, * as s from "./file1"; |]

@mhegazy Mohamed Hegazy (mhegazy) Oct 26, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

Please add a test with both unused.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Nov 7, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

That generates 2 errors and 2 fixes. So not applicable

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Comment thread src/services/codefixes/unusedIdentifierFixes.ts Outdated
case SyntaxKind.PropertyDeclaration:
return createCodeFix("", token.parent.pos, token.parent.end - token.parent.pos);

case SyntaxKind.AsteriskToken:

@mhegazy Mohamed Hegazy (mhegazy) Oct 26, 2016

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

when do we get a * token?

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions

@paulvanbrenk Paul van Brenk (paulvanbrenk) Nov 1, 2016

Copy link
Copy Markdown
Contributor Author

There was a problem hiding this comment.

Choose a reason for hiding this comment

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

removed

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
Paul van Brenk added 5 commits November 1, 2016 16:31
Paul van Brenk
Add more testcases and simplify
b59714e
Paul van Brenk
Removed unused, confusing cases
7196018
Paul van Brenk
Handle most module cases
2f453ce
Paul van Brenk
Clean up
40c0cbd
Paul van Brenk
Remove error-codes from fourslash tests
78fdd44
mhegazy
Mohamed Hegazy (mhegazy) approved these changes Nov 14, 2016
View reviewed changes
Paul van Brenk
Merge branch 'master' into unusedidentifier
1924298
@paulvanbrenk
Paul van Brenk (paulvanbrenk) merged commit 57feab3 into master Nov 15, 2016
@paulvanbrenk
Paul van Brenk (paulvanbrenk) deleted the unusedidentifier branch November 15, 2016 18:30
@microsoft Microsoft (microsoft) locked and limited conversation to collaborators Jun 19, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Reviewers

@RyanCavanaugh Ryan Cavanaugh (RyanCavanaugh) RyanCavanaugh left review comments
+1 more reviewer
@mhegazy Mohamed Hegazy (mhegazy) mhegazy approved these changes
Reviewers whose approvals may not affect merge requirements

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

4 participants

@paulvanbrenk @RyanCavanaugh @mhegazy @msftclas
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.