Skip to content

Commit 2f1effb

Browse files
committed
scope out duplicate code into setMembersDeclaredBySpreadAssignment function
1 parent 3d7bda0 commit 2f1effb

File tree

1 file changed

+14
-18
lines changed

1 file changed

+14
-18
lines changed

src/services/completions.ts

Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1893,15 +1893,7 @@ namespace ts.Completions {
18931893
let existingName: __String | undefined;
18941894

18951895
if (isSpreadAssignment(m)) {
1896-
const expression = m.expression;
1897-
const symbol = typeChecker.getSymbolAtLocation(expression);
1898-
const type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, expression);
1899-
const properties = type && (<ObjectType>type).properties;
1900-
if (properties) {
1901-
properties.forEach(property => {
1902-
membersDeclaredBySpreadAssignment.set(property.name, true);
1903-
});
1904-
}
1896+
setMembersDeclaredBySpreadAssignment(m, membersDeclaredBySpreadAssignment);
19051897
}
19061898
else if (isBindingElement(m) && m.propertyName) {
19071899
// include only identifiers in completion list
@@ -1926,6 +1918,18 @@ namespace ts.Completions {
19261918
return filteredSymbols;
19271919
}
19281920

1921+
function setMembersDeclaredBySpreadAssignment(declaration: SpreadAssignment | JsxSpreadAttribute, membersDeclaredBySpreadAssignment: Map<boolean>) {
1922+
const expression = declaration.expression;
1923+
const symbol = typeChecker.getSymbolAtLocation(expression);
1924+
const type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, expression);
1925+
const properties = type && (<ObjectType>type).properties;
1926+
if (properties) {
1927+
properties.forEach(property => {
1928+
membersDeclaredBySpreadAssignment.set(property.name, true);
1929+
});
1930+
}
1931+
}
1932+
19291933
// Set SortText to OptionalMember if it is an optinoal member
19301934
function setSortTextToOptionalMember() {
19311935
symbols.forEach(m => {
@@ -2009,15 +2013,7 @@ namespace ts.Completions {
20092013
seenNames.set(attr.name.escapedText, true);
20102014
}
20112015
else if (isJsxSpreadAttribute(attr)) {
2012-
const expression = attr.expression;
2013-
const symbol = typeChecker.getSymbolAtLocation(expression);
2014-
const type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, expression);
2015-
const properties = type && (<ObjectType>type).properties;
2016-
if (properties) {
2017-
properties.forEach(property => {
2018-
membersDeclaredBySpreadAssignment.set(property.name, true);
2019-
});
2020-
}
2016+
setMembersDeclaredBySpreadAssignment(attr, membersDeclaredBySpreadAssignment);
20212017
}
20222018
}
20232019
const filteredSymbols = symbols.filter(a => !seenNames.get(a.escapedName));

0 commit comments

Comments
 (0)