diff --git a/src/services/completions.ts b/src/services/completions.ts index d093658fa4..d2d7c33626 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -2,10 +2,12 @@ namespace ts.Completions { export enum SortText { LocationPriority = "0", - SuggestedClassMembers = "1", - GlobalsOrKeywords = "2", - AutoImportSuggestions = "3", - JavascriptIdentifiers = "4" + OptionalMember = "1", + MemberDeclaredBySpreadAssignment = "2", + SuggestedClassMembers = "3", + GlobalsOrKeywords = "4", + AutoImportSuggestions = "5", + JavascriptIdentifiers = "6" } export type Log = (message: string) => void; @@ -1109,6 +1111,7 @@ namespace ts.Completions { const attrsType = jsxContainer && typeChecker.getContextualType(jsxContainer.attributes); if (!attrsType) return GlobalsSearch.Continue; symbols = filterJsxAttributes(getPropertiesForObjectExpression(attrsType, jsxContainer!.attributes, typeChecker), jsxContainer!.attributes.properties); + setSortTextToOptionalMember(); completionKind = CompletionKind.MemberLike; isNewIdentifierLocation = false; return GlobalsSearch.Success; @@ -1539,6 +1542,8 @@ namespace ts.Completions { // Add filtered items to the completion list symbols = filterObjectMembersList(typeMembers, Debug.assertDefined(existingMembers)); } + setSortTextToOptionalMember(); + return GlobalsSearch.Success; } @@ -1910,6 +1915,7 @@ namespace ts.Completions { return contextualMemberSymbols; } + const membersDeclaredBySpreadAssignment = createMap(); const existingMemberNames = createUnderscoreEscapedMap(); for (const m of existingMembers) { // Ignore omitted expressions for missing members @@ -1918,7 +1924,8 @@ namespace ts.Completions { m.kind !== SyntaxKind.BindingElement && m.kind !== SyntaxKind.MethodDeclaration && m.kind !== SyntaxKind.GetAccessor && - m.kind !== SyntaxKind.SetAccessor) { + m.kind !== SyntaxKind.SetAccessor && + m.kind !== SyntaxKind.SpreadAssignment) { continue; } @@ -1929,7 +1936,10 @@ namespace ts.Completions { let existingName: __String | undefined; - if (isBindingElement(m) && m.propertyName) { + if (isSpreadAssignment(m)) { + setMembersDeclaredBySpreadAssignment(m, membersDeclaredBySpreadAssignment); + } + else if (isBindingElement(m) && m.propertyName) { // include only identifiers in completion list if (m.propertyName.kind === SyntaxKind.Identifier) { existingName = m.propertyName.escapedText; @@ -1946,7 +1956,43 @@ namespace ts.Completions { existingMemberNames.set(existingName!, true); // TODO: GH#18217 } - return contextualMemberSymbols.filter(m => !existingMemberNames.get(m.escapedName)); + const filteredSymbols = contextualMemberSymbols.filter(m => !existingMemberNames.get(m.escapedName)); + setSortTextToMemberDeclaredBySpreadAssignment(membersDeclaredBySpreadAssignment, filteredSymbols); + + return filteredSymbols; + } + + function setMembersDeclaredBySpreadAssignment(declaration: SpreadAssignment | JsxSpreadAttribute, membersDeclaredBySpreadAssignment: Map) { + const expression = declaration.expression; + const symbol = typeChecker.getSymbolAtLocation(expression); + const type = symbol && typeChecker.getTypeOfSymbolAtLocation(symbol, expression); + const properties = type && (type).properties; + if (properties) { + properties.forEach(property => { + membersDeclaredBySpreadAssignment.set(property.name, true); + }); + } + } + + // Set SortText to OptionalMember if it is an optinoal member + function setSortTextToOptionalMember() { + symbols.forEach(m => { + if (m.flags & SymbolFlags.Optional) { + symbolToSortTextMap[getSymbolId(m)] = symbolToSortTextMap[getSymbolId(m)] || SortText.OptionalMember; + } + }); + } + + // Set SortText to MemberDeclaredBySpreadAssignment if it is fulfilled by spread assignment + function setSortTextToMemberDeclaredBySpreadAssignment(membersDeclaredBySpreadAssignment: Map, contextualMemberSymbols: Symbol[]): void { + if (membersDeclaredBySpreadAssignment.size === 0) { + return; + } + for (const contextualMemberSymbol of contextualMemberSymbols) { + if (membersDeclaredBySpreadAssignment.has(contextualMemberSymbol.name)) { + symbolToSortTextMap[getSymbolId(contextualMemberSymbol)] = SortText.MemberDeclaredBySpreadAssignment; + } + } } /** @@ -2000,6 +2046,7 @@ namespace ts.Completions { */ function filterJsxAttributes(symbols: Symbol[], attributes: NodeArray): Symbol[] { const seenNames = createUnderscoreEscapedMap(); + const membersDeclaredBySpreadAssignment = createMap(); for (const attr of attributes) { // If this is the current item we are editing right now, do not filter it out if (isCurrentlyEditingNode(attr)) { @@ -2009,9 +2056,15 @@ namespace ts.Completions { if (attr.kind === SyntaxKind.JsxAttribute) { seenNames.set(attr.name.escapedText, true); } + else if (isJsxSpreadAttribute(attr)) { + setMembersDeclaredBySpreadAssignment(attr, membersDeclaredBySpreadAssignment); + } } + const filteredSymbols = symbols.filter(a => !seenNames.get(a.escapedName)); - return symbols.filter(a => !seenNames.get(a.escapedName)); + setSortTextToMemberDeclaredBySpreadAssignment(membersDeclaredBySpreadAssignment, filteredSymbols); + + return filteredSymbols; } function isCurrentlyEditingNode(node: Node): boolean { diff --git a/src/services/smartSelection.ts b/src/services/smartSelection.ts index 2aaf0cf079..984c1de86e 100644 --- a/src/services/smartSelection.ts +++ b/src/services/smartSelection.ts @@ -26,7 +26,7 @@ namespace ts.SmartSelectionRange { // // Dive in without pushing a selection range. if (isBlock(node) - || isTemplateSpan(node) || isTemplateHead(node) + || isTemplateSpan(node) || isTemplateHead(node) || isTemplateTail(node) || prevNode && isTemplateHead(prevNode) || isVariableDeclarationList(node) && isVariableStatement(parentNode) || isSyntaxList(node) && isVariableDeclarationList(parentNode) diff --git a/tests/baselines/reference/docker/azure-sdk.log b/tests/baselines/reference/docker/azure-sdk.log index ce7e6e724c..4791b54045 100644 --- a/tests/baselines/reference/docker/azure-sdk.log +++ b/tests/baselines/reference/docker/azure-sdk.log @@ -23,7 +23,7 @@ Warning: You have changed the public API signature for this project. Updating re dist-esm/index.js → dist/index.js... (!) Unresolved dependencies https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency -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) +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) @azure/cosmos-sign (imported by dist-esm/auth.js) universal-user-agent (imported by dist-esm/common/platform.js) 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 dist-esm/index.js → dist/index.js... (!) Unresolved dependencies https://rollupjs.org/guide/en/#warning-treating-module-as-external-dependency -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) +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) @azure/cosmos-sign (imported by dist-esm/auth.js) universal-user-agent (imported by dist-esm/common/platform.js) uuid/v4 (imported by dist-esm/ClientContext.js, dist-esm/client/Item/Items.js) diff --git a/tests/baselines/reference/docker/office-ui-fabric.log b/tests/baselines/reference/docker/office-ui-fabric.log index 01858ab7d2..f2b990e5b4 100644 --- a/tests/baselines/reference/docker/office-ui-fabric.log +++ b/tests/baselines/reference/docker/office-ui-fabric.log @@ -180,6 +180,7 @@ Standard output: @uifabric/styling: PASS src/styles/theme.test.ts @uifabric/styling: PASS src/styles/scheme.test.ts @uifabric/styling: PASS src/styles/getGlobalClassNames.test.ts +@uifabric/styling: PASS src/utilities/icons.test.ts @uifabric/styling: [XX:XX:XX XM] ■ Extracting Public API surface from '/office-ui-fabric-react/packages/styling/lib/index.d.ts' @uifabric/styling: Done in ?s. @uifabric/file-type-icons: yarn run vX.X.X diff --git a/tests/baselines/reference/smartSelection_templateStrings2.baseline b/tests/baselines/reference/smartSelection_templateStrings2.baseline new file mode 100644 index 0000000000..cb49f567cb --- /dev/null +++ b/tests/baselines/reference/smartSelection_templateStrings2.baseline @@ -0,0 +1,4 @@ +`a ${b} /**/c` + + a ${b} c +`a ${b} c` \ No newline at end of file diff --git a/tests/baselines/reference/user/puppeteer.log b/tests/baselines/reference/user/puppeteer.log index 2600112696..e4b86a40d0 100644 --- a/tests/baselines/reference/user/puppeteer.log +++ b/tests/baselines/reference/user/puppeteer.log @@ -22,26 +22,26 @@ lib/Coverage.js(208,15): error TS2503: Cannot find namespace 'Protocol'. lib/EmulationManager.js(36,16): error TS2503: Cannot find namespace 'Protocol'. lib/ExecutionContext.js(26,15): error TS2503: Cannot find namespace 'Protocol'. lib/ExecutionContext.js(158,18): error TS2503: Cannot find namespace 'Protocol'. -lib/FrameManager.js(152,15): error TS2503: Cannot find namespace 'Protocol'. -lib/FrameManager.js(174,15): error TS2503: Cannot find namespace 'Protocol'. -lib/FrameManager.js(231,15): error TS2503: Cannot find namespace 'Protocol'. -lib/FrameManager.js(669,15): error TS2503: Cannot find namespace 'Protocol'. +lib/FrameManager.js(151,15): error TS2503: Cannot find namespace 'Protocol'. +lib/FrameManager.js(173,15): error TS2503: Cannot find namespace 'Protocol'. +lib/FrameManager.js(230,15): error TS2503: Cannot find namespace 'Protocol'. +lib/FrameManager.js(668,15): error TS2503: Cannot find namespace 'Protocol'. lib/JSHandle.js(33,15): error TS2503: Cannot find namespace 'Protocol'. -lib/JSHandle.js(129,15): error TS2503: Cannot find namespace 'Protocol'. -lib/JSHandle.js(220,29): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(31,30): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(165,15): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(184,15): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(203,15): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(224,15): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(245,15): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(255,15): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(269,15): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(282,15): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(301,15): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(325,15): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(535,15): error TS2503: Cannot find namespace 'Protocol'. -lib/NetworkManager.js(674,15): error TS2503: Cannot find namespace 'Protocol'. +lib/JSHandle.js(147,15): error TS2503: Cannot find namespace 'Protocol'. +lib/JSHandle.js(238,29): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(32,30): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(159,15): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(178,15): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(197,15): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(218,15): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(239,15): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(249,15): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(263,15): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(276,15): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(295,15): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(319,15): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(529,15): error TS2503: Cannot find namespace 'Protocol'. +lib/NetworkManager.js(668,15): error TS2503: Cannot find namespace 'Protocol'. lib/Page.js(93,33): error TS2345: Argument of type 'CDPSession' is not assignable to parameter of type 'Puppeteer.CDPSession'. Types of property 'on' are incompatible. Type '(event: string | symbol, listener: (...args: any[]) => void) => CDPSession' is not assignable to type '(event: T, listener: (arg: any) => void) => CDPSession'. diff --git a/tests/cases/fourslash/completionsAtIncompleteObjectLiteralProperty.ts b/tests/cases/fourslash/completionsAtIncompleteObjectLiteralProperty.ts index 130b70de94..3682b31004 100644 --- a/tests/cases/fourslash/completionsAtIncompleteObjectLiteralProperty.ts +++ b/tests/cases/fourslash/completionsAtIncompleteObjectLiteralProperty.ts @@ -10,5 +10,5 @@ verify.completions({ marker: "", - exact: ["abc"], + exact: [{ name: 'abc', kind: 'property', kindModifiers: 'declare,optional', sortText: completion.SortText.OptionalMember }], }); diff --git a/tests/cases/fourslash/completionsOptionalMethod.ts b/tests/cases/fourslash/completionsOptionalMethod.ts index 4c70e31606..b585dca345 100644 --- a/tests/cases/fourslash/completionsOptionalMethod.ts +++ b/tests/cases/fourslash/completionsOptionalMethod.ts @@ -5,4 +5,4 @@ ////declare const x: { m?(): void }; ////x./**/ -verify.completions({ marker: "", exact: "m" }); +verify.completions({ marker: "", exact: "m" }); \ No newline at end of file diff --git a/tests/cases/fourslash/completionsPropertiesPriorities.ts b/tests/cases/fourslash/completionsPropertiesPriorities.ts new file mode 100644 index 0000000000..f2269243e3 --- /dev/null +++ b/tests/cases/fourslash/completionsPropertiesPriorities.ts @@ -0,0 +1,31 @@ +/// +// @strict: true + +//// interface I { +//// B?: number; +//// a: number; +//// c?: string; +//// d: string +//// } + +//// const foo = { +//// a: 1, +//// B: 2 +//// } + +//// const i: I = { +//// ...foo, +//// /*a*/ +//// } + +verify.completions( + { + marker: ['a'], + exact: [ + { name: 'B', kindModifiers: 'optional', sortText: completion.SortText.MemberDeclaredBySpreadAssignment, kind: 'property' }, + { name: 'a', sortText: completion.SortText.MemberDeclaredBySpreadAssignment, kind: 'property' }, + { name: 'c', kindModifiers: 'optional', sortText: completion.SortText.OptionalMember, kind: 'property' }, + { name: 'd', sortText: completion.SortText.LocationPriority, kind: 'property' } + ] + } +); \ No newline at end of file diff --git a/tests/cases/fourslash/completionsWithOptionalProperties.ts b/tests/cases/fourslash/completionsWithOptionalProperties.ts index e40029ddef..78b0564647 100644 --- a/tests/cases/fourslash/completionsWithOptionalProperties.ts +++ b/tests/cases/fourslash/completionsWithOptionalProperties.ts @@ -13,6 +13,8 @@ verify.completions({ marker: "", - includes: ['world'] + exact: [ + { name: "world", kind: "property", kindModifiers: "optional", sortText: completion.SortText.OptionalMember } + ] }); diff --git a/tests/cases/fourslash/fourslash.ts b/tests/cases/fourslash/fourslash.ts index cbb6df2858..d64bc0a866 100644 --- a/tests/cases/fourslash/fourslash.ts +++ b/tests/cases/fourslash/fourslash.ts @@ -672,10 +672,12 @@ declare namespace completion { type Entry = FourSlashInterface.ExpectedCompletionEntryObject; export const enum SortText { LocationPriority = "0", - SuggestedClassMembers = "1", - GlobalsOrKeywords = "2", - AutoImportSuggestions = "3", - JavascriptIdentifiers = "4" + OptionalMember = "1", + MemberDeclaredBySpreadAssignment = "2", + SuggestedClassMembers = "3", + GlobalsOrKeywords = "4", + AutoImportSuggestions = "5", + JavascriptIdentifiers = "6" } export const globalThisEntry: Entry; export const undefinedVarEntry: Entry; diff --git a/tests/cases/fourslash/smartSelection_templateStrings2.ts b/tests/cases/fourslash/smartSelection_templateStrings2.ts new file mode 100644 index 0000000000..dd13ffe11a --- /dev/null +++ b/tests/cases/fourslash/smartSelection_templateStrings2.ts @@ -0,0 +1,5 @@ +/// + +////`a ${b} /**/c` + +verify.baselineSmartSelection(); diff --git a/tests/cases/fourslash/tsxCompletion12.ts b/tests/cases/fourslash/tsxCompletion12.ts index 3b3b3ac547..843ed1532f 100644 --- a/tests/cases/fourslash/tsxCompletion12.ts +++ b/tests/cases/fourslash/tsxCompletion12.ts @@ -23,7 +23,13 @@ //// let opt4 = ; verify.completions( - { marker: ["1", "2", "5"], exact: ["propx", "propString", "optional"] }, - { marker: "3", exact: ["propString", "optional"] }, + { + marker: ["1", "2", "5"], + exact: ["propx", "propString", { name: "optional", kind: "JSX attribute", kindModifiers: "optional", sortText: completion.SortText.OptionalMember }] + }, + { + marker: "3", + exact: ["propString", { name: "optional", kind: "JSX attribute", kindModifiers: "optional", sortText: completion.SortText.OptionalMember }] + }, { marker: "4", exact: "propString" }, ); diff --git a/tests/cases/fourslash/tsxCompletion13.ts b/tests/cases/fourslash/tsxCompletion13.ts index b1ac2c7af7..1fec1223d0 100644 --- a/tests/cases/fourslash/tsxCompletion13.ts +++ b/tests/cases/fourslash/tsxCompletion13.ts @@ -31,7 +31,28 @@ //// let opt = ; verify.completions( - { marker: ["1", "6"], exact: ["onClick", "children", "className", "goTo"] }, - { marker: "2", exact: ["onClick", "className", "goTo"] }, - { marker: ["3", "4", "5"], exact: ["children", "className"] }, + { + marker: ["1", "6"], + exact: [ + "onClick", + { name: "children", kind: "JSX attribute", kindModifiers: "optional", sortText: completion.SortText.OptionalMember }, + { name: "className", kind: "JSX attribute", kindModifiers: "optional", sortText: completion.SortText.OptionalMember }, + "goTo" + ] + }, + { + marker: "2", + exact: [ + "onClick", + { name: "className", kind: "JSX attribute", kindModifiers: "optional", sortText: completion.SortText.OptionalMember }, + "goTo" + ] + }, + { + marker: ["3", "4", "5"], + exact: [ + { name: "children", kind: "JSX attribute", kindModifiers: "optional", sortText: completion.SortText.OptionalMember }, + { name: "className", kind: "JSX attribute", kindModifiers: "optional", sortText: completion.SortText.OptionalMember } + ] + }, ); diff --git a/tests/cases/fourslash/tsxCompletion7.ts b/tests/cases/fourslash/tsxCompletion7.ts index 87638f38e3..a54e860b35 100644 --- a/tests/cases/fourslash/tsxCompletion7.ts +++ b/tests/cases/fourslash/tsxCompletion7.ts @@ -10,4 +10,10 @@ //// let y = { ONE: '' }; //// var x =
; -verify.completions({ marker: "", exact: ["ONE", "TWO"] }); +verify.completions({ + marker: "", + exact: [ + { name: "ONE", kind: "JSX attribute", kindModifiers: "declare", sortText: completion.SortText.MemberDeclaredBySpreadAssignment }, + { name: "TWO", kind: "JSX attribute", kindModifiers: "declare", sortText: completion.SortText.LocationPriority } + ] +}); diff --git a/tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter b/tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter index 1bf5836cae..722ebf8053 160000 --- a/tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter +++ b/tests/cases/user/TypeScript-Node-Starter/TypeScript-Node-Starter @@ -1 +1 @@ -Subproject commit 1bf5836cae5246b89bbf7063c3e84e110222fcdf +Subproject commit 722ebf8053d2bf82bb66134b21c7e291ccae35c4 diff --git a/tests/cases/user/TypeScript-React-Starter/TypeScript-React-Starter b/tests/cases/user/TypeScript-React-Starter/TypeScript-React-Starter index bfc20b2f17..19c71f2c6a 160000 --- a/tests/cases/user/TypeScript-React-Starter/TypeScript-React-Starter +++ b/tests/cases/user/TypeScript-React-Starter/TypeScript-React-Starter @@ -1 +1 @@ -Subproject commit bfc20b2f17c0206105e2cdd42cd35d79dd03a884 +Subproject commit 19c71f2c6a2b874b1b2bb28a8526b19185b8eece diff --git a/tests/cases/user/axios-src/axios-src b/tests/cases/user/axios-src/axios-src index 2ee3b48245..98e4acd893 160000 --- a/tests/cases/user/axios-src/axios-src +++ b/tests/cases/user/axios-src/axios-src @@ -1 +1 @@ -Subproject commit 2ee3b482456cd2a09ccbd3a4b0c20f3d0c5a5644 +Subproject commit 98e4acd893fe024ae9e6074894c6164802b3af63 diff --git a/tests/cases/user/create-react-app/create-react-app b/tests/cases/user/create-react-app/create-react-app index 437b83f033..6dec056de3 160000 --- a/tests/cases/user/create-react-app/create-react-app +++ b/tests/cases/user/create-react-app/create-react-app @@ -1 +1 @@ -Subproject commit 437b83f0337a5d57ce7dd976d2c3b44cb2037e45 +Subproject commit 6dec056de3c646fa1bce41acadc31641237863a0 diff --git a/tests/cases/user/prettier/prettier b/tests/cases/user/prettier/prettier index 2314640485..223443c057 160000 --- a/tests/cases/user/prettier/prettier +++ b/tests/cases/user/prettier/prettier @@ -1 +1 @@ -Subproject commit 23146404850011972f695fb6bc2b8113c3cffbfc +Subproject commit 223443c057e64ca04cda5c0f37f5d15daaf69337 diff --git a/tests/cases/user/puppeteer/puppeteer b/tests/cases/user/puppeteer/puppeteer index b6b29502eb..c2651c2b5c 160000 --- a/tests/cases/user/puppeteer/puppeteer +++ b/tests/cases/user/puppeteer/puppeteer @@ -1 +1 @@ -Subproject commit b6b29502eb6a75fe3869806f0e7b27195fe51b0d +Subproject commit c2651c2b5cc888ebd0ca6be87063d9f98b9eb59c diff --git a/tests/cases/user/webpack/webpack b/tests/cases/user/webpack/webpack index 743ae6da9a..b2b5b278dd 160000 --- a/tests/cases/user/webpack/webpack +++ b/tests/cases/user/webpack/webpack @@ -1 +1 @@ -Subproject commit 743ae6da9a6fc3b459a7ab3bb250fb07d14f9c5d +Subproject commit b2b5b278ddfa49cea5a2a74b42917633e2d58237