TypeScript/tests/cases/fourslash/refactorConvertToOptionalChainExpression_NotForOtherOperators.ts
Jesse Trinity 17022388bd
Add refactor convertToOptionalChainExpression (#39135)
* add convertOptionalChain

* cover more cases

* expose containsMatchingReference

* clean up performing edits

* bound start position

* add tests

* refactor and handle edge cases

* update tests

* consider explicit requests for empty spans

* update fourslash to use trigger reason

* add tests cases for trigger reason

* fix errors

* remove type assertion

* fix non ampersand chains

* clean up some logic

* add ternary case

* add diagnostic message

* add nullish check for ternary expressions

* Update src/services/refactors/convertToOptionalChainExpression.ts

Co-authored-by: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com>

* Update src/services/refactors/convertToOptionalChainExpression.ts

Co-authored-by: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com>

* Update tests/cases/fourslash/refactorConvertToOptionalChainExpressionForTriggerReason3.ts

Co-authored-by: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com>

* Update tests/cases/fourslash/refactorConvertToOptionalChainExpressionForTriggerReason1.ts

Co-authored-by: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com>

* reformat and remove unused checks

* allow any for ternary refactor

* add tests

* add tests

* check return and variable statements

* use isMatchingReference instead of containsMatchingReference

* allow partial selections

* fine tune selection ranges

* recurse for call expressions

* fix spellings

* add recursive cases

* remove isOrContainsMatchingReference

* cleanup

* more refactoring

* cleanup

* rename tests

* address PR comments

* check match syntactically

* handle another call expression case

* some renames

* inline some checks

* add test

* address comments

* add refactorNotAvailableReason

Co-authored-by: Nathan Shively-Sanders <293473+sandersn@users.noreply.github.com>
2020-07-13 19:33:33 -07:00

29 lines
1.1 KiB
TypeScript

/// <reference path='fourslash.ts' />
////let a = { b: { c: { d: 0 } } };
/////*1a*/a || a.b && a.b.c && a.b.c.d;/*1b*/
/////*2a*/a && a.b || a.b.c && a.b.c.d;/*2b*/
/////*3a*/a && a.b && a.b.c || a.b.c.d;/*3b*/
/////*4a*/a ?? a.b && a.b.c && a.b.c.d;/*4b*/
/////*5a*/a && a.b ?? a.b.c || a.b.c.d;/*5b*/
/////*6a*/a && a.b && a.b.c ?? a.b.c.d;/*6b*/
// Only offer refactor for && chains.
goTo.select("1a", "1b");
verify.not.refactorAvailableForTriggerReason("implicit", "Convert to optional chain expression");
goTo.select("2a", "2b");
verify.not.refactorAvailableForTriggerReason("implicit", "Convert to optional chain expression");
goTo.select("3a", "3b");
verify.not.refactorAvailableForTriggerReason("implicit", "Convert to optional chain expression");
goTo.select("4a", "4b");
verify.not.refactorAvailableForTriggerReason("implicit", "Convert to optional chain expression");
goTo.select("5a", "5b");
verify.not.refactorAvailableForTriggerReason("implicit", "Convert to optional chain expression");
goTo.select("6a", "6b");
verify.not.refactorAvailableForTriggerReason("implicit", "Convert to optional chain expression");