TypeScript/tests/cases/fourslash/refactorConvertToOptionalChainExpression_NotForOtherOperators.ts

29 lines
1.1 KiB
TypeScript
Raw Normal View History

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-14 04:33:33 +02:00
/// <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");