Skip to content

Commit 7b61fa2

Browse files
TypeScript Botandrewbranch
andauthored
Cherry-pick PR #44724 into release-4.3 (#44822)
Component commits: 5545946 Fix auto imports in opening JSX tag Co-authored-by: Andrew Branch <andrew@wheream.io>
1 parent 3221035 commit 7b61fa2

File tree

2 files changed

+43
-9
lines changed

2 files changed

+43
-9
lines changed

src/services/completions.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1275,10 +1275,9 @@ namespace ts.Completions {
12751275
getTypeScriptMemberSymbols();
12761276
}
12771277
else if (isRightOfOpenTag) {
1278-
const tagSymbols = typeChecker.getJsxIntrinsicTagNamesAt(location);
1279-
Debug.assertEachIsDefined(tagSymbols, "getJsxIntrinsicTagNames() should all be defined");
1278+
symbols = typeChecker.getJsxIntrinsicTagNamesAt(location);
1279+
Debug.assertEachIsDefined(symbols, "getJsxIntrinsicTagNames() should all be defined");
12801280
tryGetGlobalSymbols();
1281-
symbols = tagSymbols.concat(symbols);
12821281
completionKind = CompletionKind.Global;
12831282
keywordFilters = KeywordCompletionFilters.None;
12841283
}
@@ -1564,7 +1563,7 @@ namespace ts.Completions {
15641563
const attrsType = jsxContainer && typeChecker.getContextualType(jsxContainer.attributes);
15651564
if (!attrsType) return GlobalsSearch.Continue;
15661565
const completionsType = jsxContainer && typeChecker.getContextualType(jsxContainer.attributes, ContextFlags.Completions);
1567-
symbols = filterJsxAttributes(getPropertiesForObjectExpression(attrsType, completionsType, jsxContainer!.attributes, typeChecker), jsxContainer!.attributes.properties);
1566+
symbols = concatenate(symbols, filterJsxAttributes(getPropertiesForObjectExpression(attrsType, completionsType, jsxContainer!.attributes, typeChecker), jsxContainer!.attributes.properties));
15681567
setSortTextToOptionalMember();
15691568
completionKind = CompletionKind.MemberLike;
15701569
isNewIdentifierLocation = false;
@@ -1621,7 +1620,7 @@ namespace ts.Completions {
16211620

16221621
const symbolMeanings = (isTypeOnly ? SymbolFlags.None : SymbolFlags.Value) | SymbolFlags.Type | SymbolFlags.Namespace | SymbolFlags.Alias;
16231622

1624-
symbols = typeChecker.getSymbolsInScope(scopeNode, symbolMeanings);
1623+
symbols = concatenate(symbols, typeChecker.getSymbolsInScope(scopeNode, symbolMeanings));
16251624
Debug.assertEachIsDefined(symbols, "getSymbolsInScope() should all be defined");
16261625
for (const symbol of symbols) {
16271626
if (!typeChecker.isArgumentsSymbol(symbol) &&
@@ -1957,7 +1956,7 @@ namespace ts.Completions {
19571956
const existingMemberEscapedNames: Set<__String> = new Set();
19581957
existingMembers.forEach(s => existingMemberEscapedNames.add(s.escapedName));
19591958

1960-
symbols = filter(members, s => !existingMemberEscapedNames.has(s.escapedName));
1959+
symbols = concatenate(symbols, filter(members, s => !existingMemberEscapedNames.has(s.escapedName)));
19611960

19621961
completionKind = CompletionKind.ObjectPropertyDeclaration;
19631962
isNewIdentifierLocation = true;
@@ -2046,7 +2045,7 @@ namespace ts.Completions {
20462045

20472046
if (typeMembers && typeMembers.length > 0) {
20482047
// Add filtered items to the completion list
2049-
symbols = filterObjectMembersList(typeMembers, Debug.checkDefined(existingMembers));
2048+
symbols = concatenate(symbols, filterObjectMembersList(typeMembers, Debug.checkDefined(existingMembers)));
20502049
}
20512050
setSortTextToOptionalMember();
20522051

@@ -2082,7 +2081,7 @@ namespace ts.Completions {
20822081
isNewIdentifierLocation = false;
20832082
const exports = typeChecker.getExportsAndPropertiesOfModule(moduleSpecifierSymbol);
20842083
const existing = new Set((namedImportsOrExports.elements as NodeArray<ImportOrExportSpecifier>).filter(n => !isCurrentlyEditingNode(n)).map(n => (n.propertyName || n.name).escapedText));
2085-
symbols = exports.filter(e => e.escapedName !== InternalSymbolName.Default && !existing.has(e.escapedName));
2084+
symbols = concatenate(symbols, exports.filter(e => e.escapedName !== InternalSymbolName.Default && !existing.has(e.escapedName)));
20862085
return GlobalsSearch.Success;
20872086
}
20882087

@@ -2161,7 +2160,7 @@ namespace ts.Completions {
21612160
type?.symbol && typeChecker.getPropertiesOfType(typeChecker.getTypeOfSymbolAtLocation(type.symbol, decl)) :
21622161
type && typeChecker.getPropertiesOfType(type);
21632162
});
2164-
symbols = filterClassMembersList(baseSymbols, decl.members, classElementModifierFlags);
2163+
symbols = concatenate(symbols, filterClassMembersList(baseSymbols, decl.members, classElementModifierFlags));
21652164
}
21662165

21672166
return GlobalsSearch.Success;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
// @jsx: react
4+
5+
// @Filename: /types.d.ts
6+
//// declare namespace JSX {
7+
//// interface IntrinsicElements { a }
8+
//// }
9+
10+
// @Filename: /Box.tsx
11+
//// export function Box(props: any) { return null; }
12+
13+
// @Filename: /App.tsx
14+
//// export function App() {
15+
//// return (
16+
//// <div className="App">
17+
//// <Box/**/
18+
//// </div>
19+
//// )
20+
//// }
21+
22+
verify.applyCodeActionFromCompletion("", {
23+
name: "Box",
24+
source: "/Box",
25+
description: `Import 'Box' from module "./Box"`,
26+
newFileContent: `import { Box } from "./Box";
27+
28+
export function App() {
29+
return (
30+
<div className="App">
31+
<Box
32+
</div>
33+
)
34+
}`
35+
});

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy