Skip to content

Commit a381968

Browse files
committed
Merge branch 'master' of https://github.com/Microsoft/TypeScript into feature/eslint
2 parents 4584b31 + c26c44d commit a381968

22 files changed

+181
-50
lines changed

src/services/completions.ts

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
namespace ts.Completions {
33
export enum SortText {
44
LocationPriority = "0",
5-
SuggestedClassMembers = "1",
6-
GlobalsOrKeywords = "2",
7-
AutoImportSuggestions = "3",
8-
JavascriptIdentifiers = "4"
5+
OptionalMember = "1",
6+
MemberDeclaredBySpreadAssignment = "2",
7+
SuggestedClassMembers = "3",
8+
GlobalsOrKeywords = "4",
9+
AutoImportSuggestions = "5",
10+
JavascriptIdentifiers = "6"
911
}
1012
export type Log = (message: string) => void;
1113

@@ -1109,6 +1111,7 @@ namespace ts.Completions {
11091111
const attrsType = jsxContainer && typeChecker.getContextualType(jsxContainer.attributes);
11101112
if (!attrsType) return GlobalsSearch.Continue;
11111113
symbols = filterJsxAttributes(getPropertiesForObjectExpression(attrsType, jsxContainer!.attributes, typeChecker), jsxContainer!.attributes.properties);
1114+
setSortTextToOptionalMember();
11121115
completionKind = CompletionKind.MemberLike;
11131116
isNewIdentifierLocation = false;
11141117
return GlobalsSearch.Success;
@@ -1539,6 +1542,8 @@ namespace ts.Completions {
15391542
// Add filtered items to the completion list
15401543
symbols = filterObjectMembersList(typeMembers, Debug.assertDefined(existingMembers));
15411544
}
1545+
setSortTextToOptionalMember();
1546+
15421547
return GlobalsSearch.Success;
15431548
}
15441549

@@ -1910,6 +1915,7 @@ namespace ts.Completions {
19101915
return contextualMemberSymbols;
19111916
}
19121917

1918+
const membersDeclaredBySpreadAssignment = createMap<true>();
19131919
const existingMemberNames = createUnderscoreEscapedMap<boolean>();
19141920
for (const m of existingMembers) {
19151921
// Ignore omitted expressions for missing members
@@ -1918,7 +1924,8 @@ namespace ts.Completions {
19181924
m.kind !== SyntaxKind.BindingElement &&
19191925
m.kind !== SyntaxKind.MethodDeclaration &&
19201926
m.kind !== SyntaxKind.GetAccessor &&
1921-
m.kind !== SyntaxKind.SetAccessor) {
1927+
m.kind !== SyntaxKind.SetAccessor &&
1928+
m.kind !== SyntaxKind.SpreadAssignment) {
19221929
continue;
19231930
}
19241931

@@ -1929,7 +1936,10 @@ namespace ts.Completions {
19291936

19301937
let existingName: __String | undefined;
19311938

1932-
if (isBindingElement(m) && m.propertyName) {
1939+
if (isSpreadAssignment(m)) {
1940+
setMembersDeclaredBySpreadAssignment(m, membersDeclaredBySpreadAssignment);
1941+
}
1942+
else if (isBindingElement(m) && m.propertyName) {
19331943
// include only identifiers in completion list
19341944
if (m.propertyName.kind === SyntaxKind.Identifier) {
19351945
existingName = m.propertyName.escapedText;
@@ -1946,7 +1956,43 @@ namespace ts.Completions {
19461956
existingMemberNames.set(existingName!, true); // TODO: GH#18217
19471957
}
19481958

1949-
return contextualMemberSymbols.filter(m => !existingMemberNames.get(m.escapedName));
1959+
const filteredSymbols = contextualMemberSymbols.filter(m => !existingMemberNames.get(m.escapedName));
1960+
setSortTextToMemberDeclaredBySpreadAssignment(membersDeclaredBySpreadAssignment, filteredSymbols);
1961+
1962+
return filteredSymbols;
1963+
}
1964+
1965+
function setMembersDeclaredBySpreadAssignment(declaration: SpreadAssignment | JsxSpreadAttribute, membersDeclaredBySpreadAssignment: Map<true>) {
1966+
const expression = declaration.expression;
1967+
const symbol = typeChecker.getSymbolAtLocation(expression);
1968+
const type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, expression);
1969+
const properties = type && (<ObjectType>type).properties;
1970+
if (properties) {
1971+
properties.forEach(property => {
1972+
membersDeclaredBySpreadAssignment.set(property.name, true);
1973+
});
1974+
}
1975+
}
1976+
1977+
// Set SortText to OptionalMember if it is an optinoal member
1978+
function setSortTextToOptionalMember() {
1979+
symbols.forEach(m => {
1980+
if (m.flags & SymbolFlags.Optional) {
1981+
symbolToSortTextMap[getSymbolId(m)] = symbolToSortTextMap[getSymbolId(m)] || SortText.OptionalMember;
1982+
}
1983+
});
1984+
}
1985+
1986+
// Set SortText to MemberDeclaredBySpreadAssignment if it is fulfilled by spread assignment
1987+
function setSortTextToMemberDeclaredBySpreadAssignment(membersDeclaredBySpreadAssignment: Map<true>, contextualMemberSymbols: Symbol[]): void {
1988+
if (membersDeclaredBySpreadAssignment.size === 0) {
1989+
return;
1990+
}
1991+
for (const contextualMemberSymbol of contextualMemberSymbols) {
1992+
if (membersDeclaredBySpreadAssignment.has(contextualMemberSymbol.name)) {
1993+
symbolToSortTextMap[getSymbolId(contextualMemberSymbol)] = SortText.MemberDeclaredBySpreadAssignment;
1994+
}
1995+
}
19501996
}
19511997

19521998
/**
@@ -2000,6 +2046,7 @@ namespace ts.Completions {
20002046
*/
20012047
function filterJsxAttributes(symbols: Symbol[], attributes: NodeArray<JsxAttribute | JsxSpreadAttribute>): Symbol[] {
20022048
const seenNames = createUnderscoreEscapedMap<boolean>();
2049+
const membersDeclaredBySpreadAssignment = createMap<true>();
20032050
for (const attr of attributes) {
20042051
// If this is the current item we are editing right now, do not filter it out
20052052
if (isCurrentlyEditingNode(attr)) {
@@ -2009,9 +2056,15 @@ namespace ts.Completions {
20092056
if (attr.kind === SyntaxKind.JsxAttribute) {
20102057
seenNames.set(attr.name.escapedText, true);
20112058
}
2059+
else if (isJsxSpreadAttribute(attr)) {
2060+
setMembersDeclaredBySpreadAssignment(attr, membersDeclaredBySpreadAssignment);
2061+
}
20122062
}
2063+
const filteredSymbols = symbols.filter(a => !seenNames.get(a.escapedName));
2064+
2065+
setSortTextToMemberDeclaredBySpreadAssignment(membersDeclaredBySpreadAssignment, filteredSymbols);
20132066

2014-
return symbols.filter(a => !seenNames.get(a.escapedName));
2067+
return filteredSymbols;
20152068
}
20162069

20172070
function isCurrentlyEditingNode(node: Node): boolean {

src/services/smartSelection.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ namespace ts.SmartSelectionRange {
2626
//
2727
// Dive in without pushing a selection range.
2828
if (isBlock(node)
29-
|| isTemplateSpan(node) || isTemplateHead(node)
29+
|| isTemplateSpan(node) || isTemplateHead(node) || isTemplateTail(node)
3030
|| prevNode && isTemplateHead(prevNode)
3131
|| isVariableDeclarationList(node) && isVariableStatement(parentNode)
3232
|| isSyntaxList(node) && isVariableDeclarationList(parentNode)

tests/baselines/reference/docker/azure-sdk.log

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Warning: You have changed the public API signature for this project. Updating re
2323
dist-esm/index.js → dist/index.js...
2424
(!) Unresolved dependencies
2525
https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
26-
tslib (imported by dist-esm/auth.js, dist-esm/queryIterator.js, dist-esm/CosmosClient.js, dist-esm/plugins/Plugin.js, dist-esm/ClientContext.js, dist-esm/globalEndpointManager.js, dist-esm/client/Conflict/Conflict.js, dist-esm/client/Container/Container.js, dist-esm/client/Container/Containers.js, dist-esm/client/Database/Database.js, dist-esm/client/Database/Databases.js, dist-esm/client/Item/Item.js, dist-esm/client/Item/Items.js, dist-esm/client/Offer/Offer.js, dist-esm/client/Permission/Permission.js, dist-esm/client/Permission/Permissions.js, dist-esm/client/StoredProcedure/StoredProcedure.js, dist-esm/client/StoredProcedure/StoredProcedures.js, dist-esm/client/Trigger/Trigger.js, dist-esm/client/Trigger/Triggers.js, dist-esm/client/User/User.js, dist-esm/client/User/Users.js, dist-esm/client/UserDefinedFunction/UserDefinedFunctions.js, dist-esm/client/UserDefinedFunction/UserDefinedFunction.js, dist-esm/queryExecutionContext/documentProducer.js, dist-esm/queryExecutionContext/defaultQueryExecutionContext.js, dist-esm/queryExecutionContext/parallelQueryExecutionContextBase.js, dist-esm/queryExecutionContext/pipelinedQueryExecutionContext.js, dist-esm/request/request.js, dist-esm/request/RequestHandler.js, dist-esm/ChangeFeedIterator.js, dist-esm/routing/smartRoutingMapProvider.js, dist-esm/queryExecutionContext/EndpointComponent/AggregateEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OffsetLimitEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderByEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderedDistinctEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/UnorderedDistinctEndpointComponent.js, dist-esm/retry/retryUtility.js, dist-esm/routing/partitionKeyRangeCache.js, dist-esm/retry/defaultRetryPolicy.js, dist-esm/retry/endpointDiscoveryRetryPolicy.js, dist-esm/retry/resourceThrottleRetryPolicy.js, dist-esm/retry/sessionRetryPolicy.js)
26+
tslib (imported by dist-esm/auth.js, dist-esm/queryIterator.js, dist-esm/CosmosClient.js, dist-esm/plugins/Plugin.js, dist-esm/ClientContext.js, dist-esm/globalEndpointManager.js, dist-esm/client/Conflict/Conflict.js, dist-esm/client/Container/Container.js, dist-esm/client/Container/Containers.js, dist-esm/client/Database/Database.js, dist-esm/client/Database/Databases.js, dist-esm/client/Item/Item.js, dist-esm/client/Item/Items.js, dist-esm/client/Offer/Offer.js, dist-esm/client/Permission/Permission.js, dist-esm/client/Permission/Permissions.js, dist-esm/client/StoredProcedure/StoredProcedure.js, dist-esm/client/StoredProcedure/StoredProcedures.js, dist-esm/client/Trigger/Trigger.js, dist-esm/client/Trigger/Triggers.js, dist-esm/client/User/User.js, dist-esm/client/User/Users.js, dist-esm/client/UserDefinedFunction/UserDefinedFunction.js, dist-esm/client/UserDefinedFunction/UserDefinedFunctions.js, dist-esm/queryExecutionContext/defaultQueryExecutionContext.js, dist-esm/queryExecutionContext/documentProducer.js, dist-esm/queryExecutionContext/parallelQueryExecutionContextBase.js, dist-esm/queryExecutionContext/pipelinedQueryExecutionContext.js, dist-esm/request/request.js, dist-esm/request/RequestHandler.js, dist-esm/ChangeFeedIterator.js, dist-esm/routing/smartRoutingMapProvider.js, dist-esm/queryExecutionContext/EndpointComponent/AggregateEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OffsetLimitEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderByEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderedDistinctEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/UnorderedDistinctEndpointComponent.js, dist-esm/retry/retryUtility.js, dist-esm/routing/partitionKeyRangeCache.js, dist-esm/retry/defaultRetryPolicy.js, dist-esm/retry/endpointDiscoveryRetryPolicy.js, dist-esm/retry/resourceThrottleRetryPolicy.js, dist-esm/retry/sessionRetryPolicy.js)
2727
@azure/cosmos-sign (imported by dist-esm/auth.js)
2828
universal-user-agent (imported by dist-esm/common/platform.js)
2929
uuid/v4 (imported by dist-esm/ClientContext.js, dist-esm/client/Item/Items.js)
@@ -93,7 +93,7 @@ Warning: You have changed the public API signature for this project. Updating re
9393
dist-esm/index.js → dist/index.js...
9494
(!) Unresolved dependencies
9595
https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency
96-
tslib (imported by dist-esm/auth.js, dist-esm/queryIterator.js, dist-esm/CosmosClient.js, dist-esm/plugins/Plugin.js, dist-esm/ClientContext.js, dist-esm/globalEndpointManager.js, dist-esm/client/Conflict/Conflict.js, dist-esm/client/Container/Container.js, dist-esm/client/Container/Containers.js, dist-esm/client/Database/Database.js, dist-esm/client/Database/Databases.js, dist-esm/client/Item/Item.js, dist-esm/client/Item/Items.js, dist-esm/client/Offer/Offer.js, dist-esm/client/Permission/Permission.js, dist-esm/client/Permission/Permissions.js, dist-esm/client/StoredProcedure/StoredProcedure.js, dist-esm/client/StoredProcedure/StoredProcedures.js, dist-esm/client/Trigger/Trigger.js, dist-esm/client/Trigger/Triggers.js, dist-esm/client/User/User.js, dist-esm/client/User/Users.js, dist-esm/client/UserDefinedFunction/UserDefinedFunctions.js, dist-esm/client/UserDefinedFunction/UserDefinedFunction.js, dist-esm/queryExecutionContext/documentProducer.js, dist-esm/queryExecutionContext/defaultQueryExecutionContext.js, dist-esm/queryExecutionContext/parallelQueryExecutionContextBase.js, dist-esm/queryExecutionContext/pipelinedQueryExecutionContext.js, dist-esm/request/request.js, dist-esm/request/RequestHandler.js, dist-esm/ChangeFeedIterator.js, dist-esm/routing/smartRoutingMapProvider.js, dist-esm/queryExecutionContext/EndpointComponent/AggregateEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OffsetLimitEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderByEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderedDistinctEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/UnorderedDistinctEndpointComponent.js, dist-esm/retry/retryUtility.js, dist-esm/routing/partitionKeyRangeCache.js, dist-esm/retry/defaultRetryPolicy.js, dist-esm/retry/endpointDiscoveryRetryPolicy.js, dist-esm/retry/resourceThrottleRetryPolicy.js, dist-esm/retry/sessionRetryPolicy.js)
96+
tslib (imported by dist-esm/auth.js, dist-esm/queryIterator.js, dist-esm/CosmosClient.js, dist-esm/plugins/Plugin.js, dist-esm/ClientContext.js, dist-esm/globalEndpointManager.js, dist-esm/client/Conflict/Conflict.js, dist-esm/client/Container/Container.js, dist-esm/client/Container/Containers.js, dist-esm/client/Database/Database.js, dist-esm/client/Database/Databases.js, dist-esm/client/Item/Item.js, dist-esm/client/Item/Items.js, dist-esm/client/Offer/Offer.js, dist-esm/client/Permission/Permission.js, dist-esm/client/Permission/Permissions.js, dist-esm/client/StoredProcedure/StoredProcedure.js, dist-esm/client/StoredProcedure/StoredProcedures.js, dist-esm/client/Trigger/Trigger.js, dist-esm/client/Trigger/Triggers.js, dist-esm/client/User/User.js, dist-esm/client/User/Users.js, dist-esm/client/UserDefinedFunction/UserDefinedFunction.js, dist-esm/client/UserDefinedFunction/UserDefinedFunctions.js, dist-esm/queryExecutionContext/defaultQueryExecutionContext.js, dist-esm/queryExecutionContext/documentProducer.js, dist-esm/queryExecutionContext/parallelQueryExecutionContextBase.js, dist-esm/queryExecutionContext/pipelinedQueryExecutionContext.js, dist-esm/request/request.js, dist-esm/request/RequestHandler.js, dist-esm/ChangeFeedIterator.js, dist-esm/routing/smartRoutingMapProvider.js, dist-esm/queryExecutionContext/EndpointComponent/AggregateEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OffsetLimitEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderByEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/OrderedDistinctEndpointComponent.js, dist-esm/queryExecutionContext/EndpointComponent/UnorderedDistinctEndpointComponent.js, dist-esm/retry/retryUtility.js, dist-esm/routing/partitionKeyRangeCache.js, dist-esm/retry/defaultRetryPolicy.js, dist-esm/retry/endpointDiscoveryRetryPolicy.js, dist-esm/retry/resourceThrottleRetryPolicy.js, dist-esm/retry/sessionRetryPolicy.js)
9797
@azure/cosmos-sign (imported by dist-esm/auth.js)
9898
universal-user-agent (imported by dist-esm/common/platform.js)
9999
uuid/v4 (imported by dist-esm/ClientContext.js, dist-esm/client/Item/Items.js)

tests/baselines/reference/docker/office-ui-fabric.log

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ Standard output:
180180
@uifabric/styling: PASS src/styles/theme.test.ts
181181
@uifabric/styling: PASS src/styles/scheme.test.ts
182182
@uifabric/styling: PASS src/styles/getGlobalClassNames.test.ts
183+
@uifabric/styling: PASS src/utilities/icons.test.ts
183184
@uifabric/styling: [XX:XX:XX XM] ■ Extracting Public API surface from '/office-ui-fabric-react/packages/styling/lib/index.d.ts'
184185
@uifabric/styling: Done in ?s.
185186
@uifabric/file-type-icons: yarn run vX.X.X
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
`a ${b} /**/c`
2+
3+
a ${b} c
4+
`a ${b} c`

tests/baselines/reference/user/puppeteer.log

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,26 @@ lib/Coverage.js(208,15): error TS2503: Cannot find namespace 'Protocol'.
2222
lib/EmulationManager.js(36,16): error TS2503: Cannot find namespace 'Protocol'.
2323
lib/ExecutionContext.js(26,15): error TS2503: Cannot find namespace 'Protocol'.
2424
lib/ExecutionContext.js(158,18): error TS2503: Cannot find namespace 'Protocol'.
25-
lib/FrameManager.js(152,15): error TS2503: Cannot find namespace 'Protocol'.
26-
lib/FrameManager.js(174,15): error TS2503: Cannot find namespace 'Protocol'.
27-
lib/FrameManager.js(231,15): error TS2503: Cannot find namespace 'Protocol'.
28-
lib/FrameManager.js(669,15): error TS2503: Cannot find namespace 'Protocol'.
25+
lib/FrameManager.js(151,15): error TS2503: Cannot find namespace 'Protocol'.
26+
lib/FrameManager.js(173,15): error TS2503: Cannot find namespace 'Protocol'.
27+
lib/FrameManager.js(230,15): error TS2503: Cannot find namespace 'Protocol'.
28+
lib/FrameManager.js(668,15): error TS2503: Cannot find namespace 'Protocol'.
2929
lib/JSHandle.js(33,15): error TS2503: Cannot find namespace 'Protocol'.
30-
lib/JSHandle.js(129,15): error TS2503: Cannot find namespace 'Protocol'.
31-
lib/JSHandle.js(220,29): error TS2503: Cannot find namespace 'Protocol'.
32-
lib/NetworkManager.js(31,30): error TS2503: Cannot find namespace 'Protocol'.
33-
lib/NetworkManager.js(165,15): error TS2503: Cannot find namespace 'Protocol'.
34-
lib/NetworkManager.js(184,15): error TS2503: Cannot find namespace 'Protocol'.
35-
lib/NetworkManager.js(203,15): error TS2503: Cannot find namespace 'Protocol'.
36-
lib/NetworkManager.js(224,15): error TS2503: Cannot find namespace 'Protocol'.
37-
lib/NetworkManager.js(245,15): error TS2503: Cannot find namespace 'Protocol'.
38-
lib/NetworkManager.js(255,15): error TS2503: Cannot find namespace 'Protocol'.
39-
lib/NetworkManager.js(269,15): error TS2503: Cannot find namespace 'Protocol'.
40-
lib/NetworkManager.js(282,15): error TS2503: Cannot find namespace 'Protocol'.
41-
lib/NetworkManager.js(301,15): error TS2503: Cannot find namespace 'Protocol'.
42-
lib/NetworkManager.js(325,15): error TS2503: Cannot find namespace 'Protocol'.
43-
lib/NetworkManager.js(535,15): error TS2503: Cannot find namespace 'Protocol'.
44-
lib/NetworkManager.js(674,15): error TS2503: Cannot find namespace 'Protocol'.
30+
lib/JSHandle.js(147,15): error TS2503: Cannot find namespace 'Protocol'.
31+
lib/JSHandle.js(238,29): error TS2503: Cannot find namespace 'Protocol'.
32+
lib/NetworkManager.js(32,30): error TS2503: Cannot find namespace 'Protocol'.
33+
lib/NetworkManager.js(159,15): error TS2503: Cannot find namespace 'Protocol'.
34+
lib/NetworkManager.js(178,15): error TS2503: Cannot find namespace 'Protocol'.
35+
lib/NetworkManager.js(197,15): error TS2503: Cannot find namespace 'Protocol'.
36+
lib/NetworkManager.js(218,15): error TS2503: Cannot find namespace 'Protocol'.
37+
lib/NetworkManager.js(239,15): error TS2503: Cannot find namespace 'Protocol'.
38+
lib/NetworkManager.js(249,15): error TS2503: Cannot find namespace 'Protocol'.
39+
lib/NetworkManager.js(263,15): error TS2503: Cannot find namespace 'Protocol'.
40+
lib/NetworkManager.js(276,15): error TS2503: Cannot find namespace 'Protocol'.
41+
lib/NetworkManager.js(295,15): error TS2503: Cannot find namespace 'Protocol'.
42+
lib/NetworkManager.js(319,15): error TS2503: Cannot find namespace 'Protocol'.
43+
lib/NetworkManager.js(529,15): error TS2503: Cannot find namespace 'Protocol'.
44+
lib/NetworkManager.js(668,15): error TS2503: Cannot find namespace 'Protocol'.
4545
lib/Page.js(93,33): error TS2345: Argument of type 'CDPSession' is not assignable to parameter of type 'Puppeteer.CDPSession'.
4646
Types of property 'on' are incompatible.
4747
Type '(event: string | symbol, listener: (...args: any[]) => void) => CDPSession' is not assignable to type '<T extends string | number | symbol>(event: T, listener: (arg: any) => void) => CDPSession'.

0 commit comments

Comments
 (0)