Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 65e879f

Browse filesBrowse files
author
Andy Hanson
committed
Simplify getConvertibleFieldAtPosition
1 parent 22919d5 commit 65e879f
Copy full SHA for 65e879f

5 files changed

+27-52Lines changed: 27 additions & 52 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/compiler/types.ts‎

Copy file name to clipboardExpand all lines: src/compiler/types.ts
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -879,6 +879,7 @@ namespace ts {
879879

880880
export interface PropertyDeclaration extends ClassElement, JSDocContainer {
881881
kind: SyntaxKind.PropertyDeclaration;
882+
parent: ClassLikeDeclaration;
882883
name: PropertyName;
883884
questionToken?: QuestionToken; // Present for use with reporting a grammar error
884885
exclamationToken?: ExclamationToken;
Collapse file

‎src/compiler/utilities.ts‎

Copy file name to clipboardExpand all lines: src/compiler/utilities.ts
+7-2Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3039,6 +3039,10 @@ namespace ts {
30393039
return (node as HasType).type || (isInJavaScriptFile(node) ? getJSDocType(node) : undefined);
30403040
}
30413041

3042+
export function getTypeAnnotationNode(node: Node): TypeNode | undefined {
3043+
return (node as HasType).type;
3044+
}
3045+
30423046
/**
30433047
* Gets the effective return type annotation of a signature. If the node was parsed in a
30443048
* JavaScript file, gets the return type annotation from JSDoc.
@@ -4273,8 +4277,9 @@ namespace ts {
42734277
}
42744278
}
42754279

4276-
export function isParameterPropertyDeclaration(node: Node): node is ParameterDeclaration {
4277-
return hasModifier(node, ModifierFlags.ParameterPropertyModifier) && node.parent.kind === SyntaxKind.Constructor && isClassLike(node.parent.parent);
4280+
export type ParameterPropertyDeclaration = ParameterDeclaration & { parent: ConstructorDeclaration, name: Identifier };
4281+
export function isParameterPropertyDeclaration(node: Node): node is ParameterPropertyDeclaration {
4282+
return hasModifier(node, ModifierFlags.ParameterPropertyModifier) && node.parent.kind === SyntaxKind.Constructor;
42784283
}
42794284

42804285
export function isEmptyBindingPattern(node: BindingName): node is BindingPattern {
Collapse file

‎src/services/refactors/generateGetAccessorAndSetAccessor.ts‎

Copy file name to clipboardExpand all lines: src/services/refactors/generateGetAccessorAndSetAccessor.ts
+7-48Lines changed: 7 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,14 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor {
44
const actionDescription = Diagnostics.Generate_get_and_set_accessors.message;
55
registerRefactor(actionName, { getEditsForAction, getAvailableActions });
66

7-
type AccepedDeclaration = ParameterDeclaration | PropertyDeclaration | PropertyAssignment;
7+
type AccepedDeclaration = ParameterPropertyDeclaration | PropertyDeclaration | PropertyAssignment;
88
type AccepedNameType = Identifier | StringLiteral;
99
type ContainerDeclation = ClassLikeDeclaration | ObjectLiteralExpression;
1010

11-
interface DeclarationInfo {
11+
interface Info {
1212
container: ContainerDeclation;
1313
isStatic: boolean;
1414
type: TypeNode | undefined;
15-
}
16-
17-
interface Info extends DeclarationInfo {
1815
declaration: AccepedDeclaration;
1916
fieldName: AccepedNameType;
2017
accessorName: AccepedNameType;
@@ -101,62 +98,24 @@ namespace ts.refactor.generateGetAccessorAndSetAccessor {
10198
return modifiers && createNodeArray(modifiers);
10299
}
103100

104-
function getPropertyDeclarationInfo(propertyDeclaration: PropertyDeclaration): DeclarationInfo | undefined {
105-
if (!isClassLike(propertyDeclaration.parent) || !propertyDeclaration.parent.members) return undefined;
106-
107-
return {
108-
isStatic: hasStaticModifier(propertyDeclaration),
109-
type: propertyDeclaration.type,
110-
container: propertyDeclaration.parent
111-
};
112-
}
113-
114-
function getParameterPropertyDeclarationInfo(parameterDeclaration: ParameterDeclaration): DeclarationInfo | undefined {
115-
if (!isClassLike(parameterDeclaration.parent.parent) || !parameterDeclaration.parent.parent.members) return undefined;
116-
117-
return {
118-
isStatic: false,
119-
type: parameterDeclaration.type,
120-
container: parameterDeclaration.parent.parent
121-
};
122-
}
123-
124-
function getPropertyAssignmentDeclarationInfo(propertyAssignment: PropertyAssignment): DeclarationInfo | undefined {
125-
return {
126-
isStatic: false,
127-
type: undefined,
128-
container: propertyAssignment.parent
129-
};
130-
}
131-
132-
function getDeclarationInfo(declaration: AccepedDeclaration) {
133-
if (isPropertyDeclaration(declaration)) {
134-
return getPropertyDeclarationInfo(declaration);
135-
}
136-
else if (isPropertyAssignment(declaration)) {
137-
return getPropertyAssignmentDeclarationInfo(declaration);
138-
}
139-
else {
140-
return getParameterPropertyDeclarationInfo(declaration);
141-
}
142-
}
143-
144101
function getConvertibleFieldAtPosition(file: SourceFile, startPosition: number): Info | undefined {
145102
const node = getTokenAtPosition(file, startPosition, /*includeJsDocComment*/ false);
146103
const declaration = <AccepedDeclaration>findAncestor(node.parent, or(isParameterPropertyDeclaration, isPropertyDeclaration, isPropertyAssignment));
147104
// make sure propertyDeclaration have AccessibilityModifier or Static Modifier
148105
const meaning = ModifierFlags.AccessibilityModifier | ModifierFlags.Static;
149106
if (!declaration || !isConvertableName(declaration.name) || (getModifierFlags(declaration) | meaning) !== meaning) return undefined;
150107

151-
const info = getDeclarationInfo(declaration);
152108
const fieldName = createPropertyName(getUniqueName(`_${declaration.name.text}`, file.text), declaration.name);
109+
const accessorName = createPropertyName(declaration.name.text, declaration.name);
153110
suppressLeadingAndTrailingTrivia(fieldName);
154111
suppressLeadingAndTrailingTrivia(declaration);
155112
return {
156-
...info,
113+
isStatic: hasStaticModifier(declaration),
114+
type: getTypeAnnotationNode(declaration),
115+
container: declaration.kind === SyntaxKind.Parameter ? declaration.parent.parent : declaration.parent,
157116
declaration,
158117
fieldName,
159-
accessorName: createPropertyName(declaration.name.text, declaration.name)
118+
accessorName,
160119
};
161120
}
162121

Collapse file

‎tests/baselines/reference/api/tsserverlibrary.d.ts‎

Copy file name to clipboardExpand all lines: tests/baselines/reference/api/tsserverlibrary.d.ts
+6-1Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,7 @@ declare namespace ts {
585585
}
586586
interface PropertyDeclaration extends ClassElement, JSDocContainer {
587587
kind: SyntaxKind.PropertyDeclaration;
588+
parent: ClassLikeDeclaration;
588589
name: PropertyName;
589590
questionToken?: QuestionToken;
590591
exclamationToken?: ExclamationToken;
@@ -2955,7 +2956,11 @@ declare namespace ts {
29552956
*/
29562957
function collapseTextChangeRangesAcrossMultipleVersions(changes: ReadonlyArray<TextChangeRange>): TextChangeRange;
29572958
function getTypeParameterOwner(d: Declaration): Declaration;
2958-
function isParameterPropertyDeclaration(node: Node): node is ParameterDeclaration;
2959+
type ParameterPropertyDeclaration = ParameterDeclaration & {
2960+
parent: ConstructorDeclaration;
2961+
name: Identifier;
2962+
};
2963+
function isParameterPropertyDeclaration(node: Node): node is ParameterPropertyDeclaration;
29592964
function isEmptyBindingPattern(node: BindingName): node is BindingPattern;
29602965
function isEmptyBindingElement(node: BindingElement): boolean;
29612966
function getCombinedModifierFlags(node: Node): ModifierFlags;
Collapse file

‎tests/baselines/reference/api/typescript.d.ts‎

Copy file name to clipboardExpand all lines: tests/baselines/reference/api/typescript.d.ts
+6-1Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,7 @@ declare namespace ts {
585585
}
586586
interface PropertyDeclaration extends ClassElement, JSDocContainer {
587587
kind: SyntaxKind.PropertyDeclaration;
588+
parent: ClassLikeDeclaration;
588589
name: PropertyName;
589590
questionToken?: QuestionToken;
590591
exclamationToken?: ExclamationToken;
@@ -3010,7 +3011,11 @@ declare namespace ts {
30103011
*/
30113012
function collapseTextChangeRangesAcrossMultipleVersions(changes: ReadonlyArray<TextChangeRange>): TextChangeRange;
30123013
function getTypeParameterOwner(d: Declaration): Declaration;
3013-
function isParameterPropertyDeclaration(node: Node): node is ParameterDeclaration;
3014+
type ParameterPropertyDeclaration = ParameterDeclaration & {
3015+
parent: ConstructorDeclaration;
3016+
name: Identifier;
3017+
};
3018+
function isParameterPropertyDeclaration(node: Node): node is ParameterPropertyDeclaration;
30143019
function isEmptyBindingPattern(node: BindingName): node is BindingPattern;
30153020
function isEmptyBindingElement(node: BindingElement): boolean;
30163021
function getCombinedModifierFlags(node: Node): ModifierFlags;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.