mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Rewrite logic for JSX attribute completion detection [4.5 cherry pick] (#47413)
This commit is contained in:
@@ -1,61 +0,0 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
//@Filename: file.tsx
|
||||
////declare namespace JSX {
|
||||
//// interface IntrinsicElements {
|
||||
//// button: any;
|
||||
//// div: any;
|
||||
//// }
|
||||
////}
|
||||
////function fn() {
|
||||
//// return <>
|
||||
//// <butto/*1*/
|
||||
//// </>;
|
||||
////}
|
||||
////function fn2() {
|
||||
//// return <>
|
||||
//// preceding junk <butto/*2*/
|
||||
//// </>;
|
||||
////}
|
||||
////function fn3() {
|
||||
//// return <>
|
||||
//// <butto/*3*/ style=""
|
||||
//// </>;
|
||||
////}
|
||||
|
||||
|
||||
|
||||
verify.completions(
|
||||
{
|
||||
marker: "1",
|
||||
includes: [
|
||||
{ name: "button", insertText: undefined, isSnippet: undefined }
|
||||
],
|
||||
preferences: {
|
||||
jsxAttributeCompletionStyle: "braces",
|
||||
includeCompletionsWithSnippetText: true,
|
||||
includeCompletionsWithInsertText: true,
|
||||
}
|
||||
},
|
||||
{
|
||||
marker: "2",
|
||||
includes: [
|
||||
{ name: "button", insertText: undefined, isSnippet: undefined }
|
||||
],
|
||||
preferences: {
|
||||
jsxAttributeCompletionStyle: "braces",
|
||||
includeCompletionsWithSnippetText: true,
|
||||
includeCompletionsWithInsertText: true,
|
||||
}
|
||||
},
|
||||
{
|
||||
marker: "3",
|
||||
includes: [
|
||||
{ name: "button", insertText: undefined, isSnippet: undefined }
|
||||
],
|
||||
preferences: {
|
||||
jsxAttributeCompletionStyle: "braces",
|
||||
includeCompletionsWithSnippetText: true,
|
||||
includeCompletionsWithInsertText: true,
|
||||
}
|
||||
},
|
||||
);
|
||||
@@ -0,0 +1,74 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
//@Filename: file.tsx
|
||||
////interface NestedInterface {
|
||||
//// Foo: NestedInterface;
|
||||
//// (props: {className?: string}): any;
|
||||
////}
|
||||
////
|
||||
////declare const Foo: NestedInterface;
|
||||
////
|
||||
////function fn1() {
|
||||
//// return <Foo>
|
||||
//// <Foo /*1*/ />
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn2() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo /*2*/ />
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn3() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo cla/*3*/ />
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn4() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo cla/*4*/ something />
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn5() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo something /*5*/ />
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn6() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo something cla/*6*/ />
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn7() {
|
||||
//// return <Foo /*7*/ />
|
||||
////}
|
||||
////function fn8() {
|
||||
//// return <Foo cla/*8*/ />
|
||||
////}
|
||||
////function fn9() {
|
||||
//// return <Foo cla/*9*/ something />
|
||||
////}
|
||||
////function fn10() {
|
||||
//// return <Foo something /*10*/ />
|
||||
////}
|
||||
////function fn11() {
|
||||
//// return <Foo something cla/*11*/ />
|
||||
////}
|
||||
|
||||
var preferences: FourSlashInterface.UserPreferences = {
|
||||
jsxAttributeCompletionStyle: "braces",
|
||||
includeCompletionsWithSnippetText: true,
|
||||
includeCompletionsWithInsertText: true,
|
||||
};
|
||||
|
||||
verify.completions(
|
||||
{ marker: "1", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "2", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "3", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "4", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "5", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "6", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "7", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "8", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "9", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "10", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "11", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
)
|
||||
@@ -0,0 +1,74 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
//@Filename: file.tsx
|
||||
////interface NestedInterface {
|
||||
//// Foo: NestedInterface;
|
||||
//// (props: {className?: string}): any;
|
||||
////}
|
||||
////
|
||||
////declare const Foo: NestedInterface;
|
||||
////
|
||||
////function fn1() {
|
||||
//// return <Foo>
|
||||
//// <Foo /*1*/
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn2() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo /*2*/
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn3() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo cla/*3*/
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn4() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo cla/*4*/ something
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn5() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo something /*5*/
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn6() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo something cla/*6*/
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn7() {
|
||||
//// return <Foo /*7*/
|
||||
////}
|
||||
////function fn8() {
|
||||
//// return <Foo cla/*8*/
|
||||
////}
|
||||
////function fn9() {
|
||||
//// return <Foo cla/*9*/ something
|
||||
////}
|
||||
////function fn10() {
|
||||
//// return <Foo something /*10*/
|
||||
////}
|
||||
////function fn11() {
|
||||
//// return <Foo something cla/*11*/
|
||||
////}
|
||||
|
||||
var preferences: FourSlashInterface.UserPreferences = {
|
||||
jsxAttributeCompletionStyle: "braces",
|
||||
includeCompletionsWithSnippetText: true,
|
||||
includeCompletionsWithInsertText: true,
|
||||
};
|
||||
|
||||
verify.completions(
|
||||
{ marker: "1", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "2", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "3", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "4", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "5", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "6", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "7", preferences, includes: { name: "className", insertText: "className={$1}", text: "(property) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "8", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "9", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "10", preferences, includes: { name: "className", insertText: "className={$1}", text: "(property) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
{ marker: "11", preferences, includes: { name: "className", insertText: "className={$1}", text: "(JSX attribute) className?: string", isSnippet: true, sortText: completion.SortText.OptionalMember } },
|
||||
)
|
||||
@@ -0,0 +1,54 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
//@Filename: file.tsx
|
||||
////interface NestedInterface {
|
||||
//// Foo: NestedInterface;
|
||||
//// (props: {}): any;
|
||||
////}
|
||||
////
|
||||
////declare const Foo: NestedInterface;
|
||||
////
|
||||
////function fn1() {
|
||||
//// return <Foo>
|
||||
//// </*1*/ />
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn2() {
|
||||
//// return <Foo>
|
||||
//// <Fo/*2*/ />
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn3() {
|
||||
//// return <Foo>
|
||||
//// <Foo./*3*/ />
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn4() {
|
||||
//// return <Foo>
|
||||
//// <Foo.F/*4*/ />
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn5() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo./*5*/ />
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn6() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo.F/*6*/ />
|
||||
//// </Foo>
|
||||
////}
|
||||
|
||||
var preferences: FourSlashInterface.UserPreferences = {
|
||||
jsxAttributeCompletionStyle: "braces",
|
||||
includeCompletionsWithSnippetText: true,
|
||||
includeCompletionsWithInsertText: true,
|
||||
};
|
||||
|
||||
verify.completions(
|
||||
{ marker: "1", preferences, includes: { name: "Foo", text: "const Foo: NestedInterface" } },
|
||||
{ marker: "2", preferences, includes: { name: "Foo", text: "const Foo: NestedInterface" } },
|
||||
{ marker: "3", preferences, includes: { name: "Foo", text: "(JSX attribute) NestedInterface.Foo: NestedInterface" } },
|
||||
{ marker: "4", preferences, includes: { name: "Foo", text: "(property) NestedInterface.Foo: NestedInterface" } },
|
||||
{ marker: "5", preferences, includes: { name: "Foo", text: "(JSX attribute) NestedInterface.Foo: NestedInterface" } },
|
||||
{ marker: "6", preferences, includes: { name: "Foo", text: "(property) NestedInterface.Foo: NestedInterface" } },
|
||||
)
|
||||
@@ -0,0 +1,54 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
//@Filename: file.tsx
|
||||
////interface NestedInterface {
|
||||
//// Foo: NestedInterface;
|
||||
//// (props: {}): any;
|
||||
////}
|
||||
////
|
||||
////declare const Foo: NestedInterface;
|
||||
////
|
||||
////function fn1() {
|
||||
//// return <Foo>
|
||||
//// </*1*/
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn2() {
|
||||
//// return <Foo>
|
||||
//// <Fo/*2*/
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn3() {
|
||||
//// return <Foo>
|
||||
//// <Foo./*3*/
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn4() {
|
||||
//// return <Foo>
|
||||
//// <Foo.F/*4*/
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn5() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo./*5*/
|
||||
//// </Foo>
|
||||
////}
|
||||
////function fn6() {
|
||||
//// return <Foo>
|
||||
//// <Foo.Foo.F/*6*/
|
||||
//// </Foo>
|
||||
////}
|
||||
|
||||
var preferences: FourSlashInterface.UserPreferences = {
|
||||
jsxAttributeCompletionStyle: "braces",
|
||||
includeCompletionsWithSnippetText: true,
|
||||
includeCompletionsWithInsertText: true,
|
||||
};
|
||||
|
||||
verify.completions(
|
||||
{ marker: "1", preferences, includes: { name: "Foo", text: "const Foo: NestedInterface" } },
|
||||
{ marker: "2", preferences, includes: { name: "Foo", text: "const Foo: NestedInterface" } },
|
||||
{ marker: "3", preferences, includes: { name: "Foo", text: "(JSX attribute) NestedInterface.Foo: NestedInterface" } },
|
||||
{ marker: "4", preferences, includes: { name: "Foo", text: "(property) NestedInterface.Foo: NestedInterface" } },
|
||||
{ marker: "5", preferences, includes: { name: "Foo", text: "(JSX attribute) NestedInterface.Foo: NestedInterface" } },
|
||||
{ marker: "6", preferences, includes: { name: "Foo", text: "(property) NestedInterface.Foo: NestedInterface" } },
|
||||
)
|
||||
@@ -0,0 +1,35 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
//@Filename: file.tsx
|
||||
////declare namespace JSX {
|
||||
//// interface IntrinsicElements {
|
||||
//// button: any;
|
||||
//// div: any;
|
||||
//// }
|
||||
////}
|
||||
////function fn() {
|
||||
//// return <>
|
||||
//// <butto/*1*/ />
|
||||
//// </>;
|
||||
////}
|
||||
////function fn2() {
|
||||
//// return <>
|
||||
//// preceding junk <butto/*2*/ />
|
||||
//// </>;
|
||||
////}
|
||||
////function fn3() {
|
||||
//// return <>
|
||||
//// <butto/*3*/ style="" />
|
||||
//// </>;
|
||||
////}
|
||||
|
||||
var preferences: FourSlashInterface.UserPreferences = {
|
||||
jsxAttributeCompletionStyle: "braces",
|
||||
includeCompletionsWithSnippetText: true,
|
||||
includeCompletionsWithInsertText: true,
|
||||
};
|
||||
|
||||
verify.completions(
|
||||
{ marker: "1", preferences, includes: { name: "button", text: "(JSX attribute) JSX.IntrinsicElements.button: any" } },
|
||||
{ marker: "2", preferences, includes: { name: "button", text: "(JSX attribute) JSX.IntrinsicElements.button: any" } },
|
||||
{ marker: "3", preferences, includes: { name: "button", text: "(JSX attribute) JSX.IntrinsicElements.button: any" } },
|
||||
)
|
||||
@@ -0,0 +1,35 @@
|
||||
/// <reference path="fourslash.ts" />
|
||||
//@Filename: file.tsx
|
||||
////declare namespace JSX {
|
||||
//// interface IntrinsicElements {
|
||||
//// button: any;
|
||||
//// div: any;
|
||||
//// }
|
||||
////}
|
||||
////function fn() {
|
||||
//// return <>
|
||||
//// <butto/*1*/
|
||||
//// </>;
|
||||
////}
|
||||
////function fn2() {
|
||||
//// return <>
|
||||
//// preceding junk <butto/*2*/
|
||||
//// </>;
|
||||
////}
|
||||
////function fn3() {
|
||||
//// return <>
|
||||
//// <butto/*3*/ style=""
|
||||
//// </>;
|
||||
////}
|
||||
|
||||
var preferences: FourSlashInterface.UserPreferences = {
|
||||
jsxAttributeCompletionStyle: "braces",
|
||||
includeCompletionsWithSnippetText: true,
|
||||
includeCompletionsWithInsertText: true,
|
||||
};
|
||||
|
||||
verify.completions(
|
||||
{ marker: "1", preferences, includes: { name: "button", text: "(JSX attribute) JSX.IntrinsicElements.button: any" } },
|
||||
{ marker: "2", preferences, includes: { name: "button", text: "(JSX attribute) JSX.IntrinsicElements.button: any" } },
|
||||
{ marker: "3", preferences, includes: { name: "button", text: "(JSX attribute) JSX.IntrinsicElements.button: any" } },
|
||||
)
|
||||
Reference in New Issue
Block a user