remove unused packages
This commit is contained in:
parent
5a2294edd6
commit
eab0468d4d
File diff suppressed because it is too large
Load Diff
@ -1,466 +0,0 @@
|
||||
TestAliasMergingWithNamespace
|
||||
TestAmbientShorthandGotoDefinition
|
||||
TestArgumentsAreAvailableAfterEditsAtEndOfFunction
|
||||
TestAugmentedTypesClass1
|
||||
TestAugmentedTypesClass3Fourslash
|
||||
TestBestCommonTypeObjectLiterals
|
||||
TestBestCommonTypeObjectLiterals1
|
||||
TestCodeCompletionEscaping
|
||||
TestCommentsEnumsFourslash
|
||||
TestCommentsLinePreservation
|
||||
TestCommentsUnion
|
||||
TestCompletionAfterQuestionDot
|
||||
TestCompletionAutoInsertQuestionDot
|
||||
TestCompletionCloneQuestionToken
|
||||
TestCompletionEntryClassMembersWithInferredFunctionReturnType1
|
||||
TestCompletionEntryForArgumentConstrainedToString
|
||||
TestCompletionEntryForArrayElementConstrainedToString
|
||||
TestCompletionEntryForArrayElementConstrainedToString2
|
||||
TestCompletionEntryForClassMembers_StaticWhenBaseTypeIsNotResolved
|
||||
TestCompletionEntryForUnionProperty
|
||||
TestCompletionEntryForUnionProperty2
|
||||
TestCompletionForComputedStringProperties
|
||||
TestCompletionForMetaProperty
|
||||
TestCompletionForStringLiteral
|
||||
TestCompletionForStringLiteral4
|
||||
TestCompletionForStringLiteralExport
|
||||
TestCompletionForStringLiteralImport1
|
||||
TestCompletionForStringLiteralImport2
|
||||
TestCompletionForStringLiteralNonrelativeImport12
|
||||
TestCompletionForStringLiteralNonrelativeImport14
|
||||
TestCompletionForStringLiteralNonrelativeImport16
|
||||
TestCompletionForStringLiteralNonrelativeImport17
|
||||
TestCompletionForStringLiteralNonrelativeImport18
|
||||
TestCompletionForStringLiteralNonrelativeImport2
|
||||
TestCompletionForStringLiteralNonrelativeImport3
|
||||
TestCompletionForStringLiteralNonrelativeImport4
|
||||
TestCompletionForStringLiteralNonrelativeImport7
|
||||
TestCompletionForStringLiteralNonrelativeImport8
|
||||
TestCompletionForStringLiteralNonrelativeImport9
|
||||
TestCompletionForStringLiteralNonrelativeImportTypings1
|
||||
TestCompletionForStringLiteralNonrelativeImportTypings2
|
||||
TestCompletionForStringLiteralNonrelativeImportTypings3
|
||||
TestCompletionForStringLiteralRelativeImport4
|
||||
TestCompletionForStringLiteralRelativeImport6
|
||||
TestCompletionForStringLiteralRelativeImportAllowJSTrue
|
||||
TestCompletionForStringLiteralWithDynamicImport
|
||||
TestCompletionForStringLiteral_details
|
||||
TestCompletionForStringLiteral_quotePreference
|
||||
TestCompletionForStringLiteral_quotePreference1
|
||||
TestCompletionForStringLiteral_quotePreference2
|
||||
TestCompletionForStringLiteral_quotePreference3
|
||||
TestCompletionForStringLiteral_quotePreference4
|
||||
TestCompletionForStringLiteral_quotePreference5
|
||||
TestCompletionForStringLiteral_quotePreference6
|
||||
TestCompletionForStringLiteral_quotePreference7
|
||||
TestCompletionForStringLiteral_quotePreference8
|
||||
TestCompletionImportMeta
|
||||
TestCompletionImportMetaWithGlobalDeclaration
|
||||
TestCompletionImportModuleSpecifierEndingDts
|
||||
TestCompletionImportModuleSpecifierEndingJs
|
||||
TestCompletionImportModuleSpecifierEndingJsx
|
||||
TestCompletionImportModuleSpecifierEndingTs
|
||||
TestCompletionImportModuleSpecifierEndingTsxPreserve
|
||||
TestCompletionImportModuleSpecifierEndingTsxReact
|
||||
TestCompletionImportModuleSpecifierEndingUnsupportedExtension
|
||||
TestCompletionInChecks1
|
||||
TestCompletionInFunctionLikeBody_includesPrimitiveTypes
|
||||
TestCompletionInJsDoc
|
||||
TestCompletionInNamedImportLocation
|
||||
TestCompletionInUncheckedJSFile
|
||||
TestCompletionListBuilderLocations_VariableDeclarations
|
||||
TestCompletionListForDerivedType1
|
||||
TestCompletionListForTransitivelyExportedMembers04
|
||||
TestCompletionListFunctionExpression
|
||||
TestCompletionListInArrowFunctionInUnclosedCallSite01
|
||||
TestCompletionListInClassExpressionWithTypeParameter
|
||||
TestCompletionListInClassStaticBlocks
|
||||
TestCompletionListInImportClause01
|
||||
TestCompletionListInImportClause05
|
||||
TestCompletionListInImportClause06
|
||||
TestCompletionListInNamedClassExpression
|
||||
TestCompletionListInNamedClassExpressionWithShadowing
|
||||
TestCompletionListInNamedFunctionExpression
|
||||
TestCompletionListInNamedFunctionExpression1
|
||||
TestCompletionListInNamedFunctionExpressionWithShadowing
|
||||
TestCompletionListInScope
|
||||
TestCompletionListInTemplateLiteralParts1
|
||||
TestCompletionListInUnclosedCommaExpression01
|
||||
TestCompletionListInUnclosedCommaExpression02
|
||||
TestCompletionListInUnclosedFunction08
|
||||
TestCompletionListInUnclosedFunction09
|
||||
TestCompletionListInUnclosedTaggedTemplate01
|
||||
TestCompletionListInUnclosedTaggedTemplate02
|
||||
TestCompletionListInUnclosedTemplate01
|
||||
TestCompletionListInUnclosedTemplate02
|
||||
TestCompletionListInvalidMemberNames
|
||||
TestCompletionListInvalidMemberNames2
|
||||
TestCompletionListInvalidMemberNames_escapeQuote
|
||||
TestCompletionListInvalidMemberNames_startWithSpace
|
||||
TestCompletionListInvalidMemberNames_withExistingIdentifier
|
||||
TestCompletionListObjectMembersInTypeLocationWithTypeof
|
||||
TestCompletionListOfGenericSymbol
|
||||
TestCompletionListOnAliases
|
||||
TestCompletionListStringParenthesizedExpression
|
||||
TestCompletionListStringParenthesizedType
|
||||
TestCompletionListWithoutVariableinitializer
|
||||
TestCompletionListsStringLiteralTypeAsIndexedAccessTypeObject
|
||||
TestCompletionNoAutoInsertQuestionDotForThis
|
||||
TestCompletionNoAutoInsertQuestionDotForTypeParameter
|
||||
TestCompletionNoAutoInsertQuestionDotWithUserPreferencesOff
|
||||
TestCompletionOfAwaitPromise1
|
||||
TestCompletionOfAwaitPromise2
|
||||
TestCompletionOfAwaitPromise3
|
||||
TestCompletionOfAwaitPromise5
|
||||
TestCompletionOfAwaitPromise6
|
||||
TestCompletionOfAwaitPromise7
|
||||
TestCompletionOfInterfaceAndVar
|
||||
TestCompletionPreferredSuggestions1
|
||||
TestCompletionWithConditionalOperatorMissingColon
|
||||
TestCompletionsAfterJSDoc
|
||||
TestCompletionsBeforeRestArg1
|
||||
TestCompletionsElementAccessNumeric
|
||||
TestCompletionsExportImport
|
||||
TestCompletionsGenericTypeWithMultipleBases1
|
||||
TestCompletionsImportOrExportSpecifier
|
||||
TestCompletionsInExport
|
||||
TestCompletionsInExport_moduleBlock
|
||||
TestCompletionsInRequire
|
||||
TestCompletionsJSDocImportTagAttributesEmptyModuleSpecifier1
|
||||
TestCompletionsJSDocImportTagAttributesErrorModuleSpecifier1
|
||||
TestCompletionsJSDocImportTagEmptyModuleSpecifier1
|
||||
TestCompletionsJSDocNoCrash1
|
||||
TestCompletionsJsdocTypeTagCast
|
||||
TestCompletionsJsxAttributeInitializer2
|
||||
TestCompletionsLiteralFromInferenceWithinInferredType3
|
||||
TestCompletionsLiterals
|
||||
TestCompletionsMergedDeclarations1
|
||||
TestCompletionsNewTarget
|
||||
TestCompletionsOptionalMethod
|
||||
TestCompletionsOverridingMethod1
|
||||
TestCompletionsOverridingMethod10
|
||||
TestCompletionsOverridingMethod11
|
||||
TestCompletionsOverridingMethod14
|
||||
TestCompletionsOverridingMethod17
|
||||
TestCompletionsOverridingMethod3
|
||||
TestCompletionsOverridingMethod4
|
||||
TestCompletionsOverridingMethod9
|
||||
TestCompletionsOverridingMethodCrash1
|
||||
TestCompletionsOverridingProperties1
|
||||
TestCompletionsPathsJsonModule
|
||||
TestCompletionsPathsRelativeJsonModule
|
||||
TestCompletionsPaths_importType
|
||||
TestCompletionsPaths_kinds
|
||||
TestCompletionsPaths_pathMapping
|
||||
TestCompletionsPaths_pathMapping_nonTrailingWildcard1
|
||||
TestCompletionsPaths_pathMapping_parentDirectory
|
||||
TestCompletionsRecommended_union
|
||||
TestCompletionsRedeclareModuleAsGlobal
|
||||
TestCompletionsStringsWithTriggerCharacter
|
||||
TestCompletionsSymbolMembers
|
||||
TestCompletionsTriggerCharacter
|
||||
TestCompletionsTuple
|
||||
TestCompletionsUniqueSymbol1
|
||||
TestConstEnumQuickInfoAndCompletionList
|
||||
TestConstQuickInfoAndCompletionList
|
||||
TestContextuallyTypedFunctionExpressionGeneric1
|
||||
TestDoubleUnderscoreCompletions
|
||||
TestEditJsdocType
|
||||
TestExportDefaultClass
|
||||
TestExportDefaultFunction
|
||||
TestFindAllRefsForDefaultExport03
|
||||
TestFindAllRefsForModule
|
||||
TestFindAllRefsModuleDotExports
|
||||
TestFindReferencesBindingPatternInJsdocNoCrash1
|
||||
TestFindReferencesBindingPatternInJsdocNoCrash2
|
||||
TestGenericCombinatorWithConstraints1
|
||||
TestGenericCombinators3
|
||||
TestGenericFunctionWithGenericParams1
|
||||
TestGenericInterfacesWithConstraints1
|
||||
TestGenericTypeWithMultipleBases1MultiFile
|
||||
TestGetJavaScriptCompletions10
|
||||
TestGetJavaScriptCompletions12
|
||||
TestGetJavaScriptCompletions13
|
||||
TestGetJavaScriptCompletions15
|
||||
TestGetJavaScriptCompletions18
|
||||
TestGetJavaScriptCompletions20
|
||||
TestGetJavaScriptCompletions8
|
||||
TestGetJavaScriptCompletions9
|
||||
TestGetJavaScriptGlobalCompletions1
|
||||
TestGetJavaScriptQuickInfo1
|
||||
TestGetJavaScriptQuickInfo2
|
||||
TestGetJavaScriptQuickInfo3
|
||||
TestGetJavaScriptQuickInfo4
|
||||
TestGetJavaScriptQuickInfo5
|
||||
TestGetJavaScriptQuickInfo6
|
||||
TestGetJavaScriptQuickInfo7
|
||||
TestGetJavaScriptQuickInfo8
|
||||
TestGetJavaScriptSyntacticDiagnostics24
|
||||
TestGetOccurrencesIfElseBroken
|
||||
TestGetQuickInfoForIntersectionTypes
|
||||
TestHoverOverComment
|
||||
TestImportCompletionsPackageJsonExportsSpecifierEndsInTs
|
||||
TestImportCompletionsPackageJsonExportsTrailingSlash1
|
||||
TestImportCompletionsPackageJsonImportsConditions1
|
||||
TestImportCompletionsPackageJsonImportsLength1
|
||||
TestImportCompletionsPackageJsonImportsLength2
|
||||
TestImportCompletionsPackageJsonImportsPattern
|
||||
TestImportCompletionsPackageJsonImportsPattern2
|
||||
TestImportCompletionsPackageJsonImportsPattern_capsInPath1
|
||||
TestImportCompletionsPackageJsonImportsPattern_capsInPath2
|
||||
TestImportCompletionsPackageJsonImportsPattern_js_ts
|
||||
TestImportCompletionsPackageJsonImportsPattern_ts
|
||||
TestImportCompletionsPackageJsonImportsPattern_ts_ts
|
||||
TestImportCompletionsPackageJsonImports_ts
|
||||
TestImportCompletions_importsMap1
|
||||
TestImportCompletions_importsMap2
|
||||
TestImportCompletions_importsMap3
|
||||
TestImportCompletions_importsMap4
|
||||
TestImportCompletions_importsMap5
|
||||
TestIndexerReturnTypes1
|
||||
TestIndirectClassInstantiation
|
||||
TestInstanceTypesForGenericType1
|
||||
TestJavascriptModules20
|
||||
TestJavascriptModules21
|
||||
TestJavascriptModulesTypeImport
|
||||
TestJsDocAugments
|
||||
TestJsDocExtends
|
||||
TestJsDocFunctionSignatures10
|
||||
TestJsDocFunctionSignatures11
|
||||
TestJsDocFunctionSignatures12
|
||||
TestJsDocFunctionSignatures13
|
||||
TestJsDocFunctionSignatures7
|
||||
TestJsDocFunctionSignatures8
|
||||
TestJsDocGenerics2
|
||||
TestJsDocInheritDoc
|
||||
TestJsDocPropertyDescription1
|
||||
TestJsDocPropertyDescription10
|
||||
TestJsDocPropertyDescription11
|
||||
TestJsDocPropertyDescription12
|
||||
TestJsDocPropertyDescription2
|
||||
TestJsDocPropertyDescription3
|
||||
TestJsDocPropertyDescription4
|
||||
TestJsDocPropertyDescription5
|
||||
TestJsDocPropertyDescription6
|
||||
TestJsDocPropertyDescription7
|
||||
TestJsDocPropertyDescription8
|
||||
TestJsDocPropertyDescription9
|
||||
TestJsDocTagsWithHyphen
|
||||
TestJsQuickInfoGenerallyAcceptableSize
|
||||
TestJsRequireQuickInfo
|
||||
TestJsdocCallbackTag
|
||||
TestJsdocLink2
|
||||
TestJsdocLink3
|
||||
TestJsdocLink6
|
||||
TestJsdocTemplatePrototypeCompletions
|
||||
TestJsdocThrowsTagCompletion
|
||||
TestJsdocTypedefTag
|
||||
TestJsdocTypedefTag2
|
||||
TestJsdocTypedefTagNamespace
|
||||
TestJsdocTypedefTagServices
|
||||
TestLetQuickInfoAndCompletionList
|
||||
TestLocalFunction
|
||||
TestMemberListInReopenedEnum
|
||||
TestMemberListInWithBlock
|
||||
TestMemberListOfExportedClass
|
||||
TestMemberListOnContextualThis
|
||||
TestNgProxy1
|
||||
TestNoQuickInfoForLabel
|
||||
TestNoQuickInfoInWhitespace
|
||||
TestNodeModulesImportCompletions1
|
||||
TestNumericPropertyNames
|
||||
TestOverloadQuickInfo
|
||||
TestParameterWithDestructuring
|
||||
TestParameterWithNestedDestructuring
|
||||
TestPathCompletionsAllowModuleAugmentationExtensions
|
||||
TestPathCompletionsAllowTsExtensions
|
||||
TestPathCompletionsPackageJsonExportsBundlerNoNodeCondition
|
||||
TestPathCompletionsPackageJsonExportsCustomConditions
|
||||
TestPathCompletionsPackageJsonExportsWildcard1
|
||||
TestPathCompletionsPackageJsonExportsWildcard10
|
||||
TestPathCompletionsPackageJsonExportsWildcard11
|
||||
TestPathCompletionsPackageJsonExportsWildcard12
|
||||
TestPathCompletionsPackageJsonExportsWildcard2
|
||||
TestPathCompletionsPackageJsonExportsWildcard3
|
||||
TestPathCompletionsPackageJsonExportsWildcard4
|
||||
TestPathCompletionsPackageJsonExportsWildcard5
|
||||
TestPathCompletionsPackageJsonExportsWildcard6
|
||||
TestPathCompletionsPackageJsonExportsWildcard7
|
||||
TestPathCompletionsPackageJsonExportsWildcard8
|
||||
TestPathCompletionsPackageJsonExportsWildcard9
|
||||
TestPathCompletionsPackageJsonImportsBundlerNoNodeCondition
|
||||
TestPathCompletionsPackageJsonImportsCustomConditions
|
||||
TestPathCompletionsPackageJsonImportsIgnoreMatchingNodeModule2
|
||||
TestPathCompletionsPackageJsonImportsOnlyFromClosestScope1
|
||||
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard1
|
||||
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard2
|
||||
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard3
|
||||
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard4
|
||||
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard5
|
||||
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard6
|
||||
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard7
|
||||
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard8
|
||||
TestPathCompletionsPackageJsonImportsSrcNoDistWildcard9
|
||||
TestPathCompletionsPackageJsonImportsWildcard1
|
||||
TestPathCompletionsPackageJsonImportsWildcard10
|
||||
TestPathCompletionsPackageJsonImportsWildcard11
|
||||
TestPathCompletionsPackageJsonImportsWildcard12
|
||||
TestPathCompletionsPackageJsonImportsWildcard2
|
||||
TestPathCompletionsPackageJsonImportsWildcard3
|
||||
TestPathCompletionsPackageJsonImportsWildcard4
|
||||
TestPathCompletionsPackageJsonImportsWildcard5
|
||||
TestPathCompletionsPackageJsonImportsWildcard6
|
||||
TestPathCompletionsPackageJsonImportsWildcard7
|
||||
TestPathCompletionsPackageJsonImportsWildcard8
|
||||
TestPathCompletionsPackageJsonImportsWildcard9
|
||||
TestPathCompletionsTypesVersionsLocal
|
||||
TestPathCompletionsTypesVersionsWildcard1
|
||||
TestPathCompletionsTypesVersionsWildcard2
|
||||
TestPathCompletionsTypesVersionsWildcard3
|
||||
TestPathCompletionsTypesVersionsWildcard4
|
||||
TestPathCompletionsTypesVersionsWildcard5
|
||||
TestPathCompletionsTypesVersionsWildcard6
|
||||
TestProtoVarVisibleWithOuterScopeUnderscoreProto
|
||||
TestQuickInfoAlias
|
||||
TestQuickInfoAssertionNodeNotReusedWhenTypeNotEquivalent1
|
||||
TestQuickInfoBindingPatternInJsdocNoCrash1
|
||||
TestQuickInfoClassKeyword
|
||||
TestQuickInfoContextualTyping
|
||||
TestQuickInfoContextuallyTypedSignatureOptionalParameterFromIntersection1
|
||||
TestQuickInfoDisplayPartsIife
|
||||
TestQuickInfoElementAccessDeclaration
|
||||
TestQuickInfoForConstTypeReference
|
||||
TestQuickInfoForContextuallyTypedArrowFunctionInSuperCall
|
||||
TestQuickInfoForContextuallyTypedIife
|
||||
TestQuickInfoForContextuallyTypedParameters
|
||||
TestQuickInfoForGenericConstraints1
|
||||
TestQuickInfoForGenericPrototypeMember
|
||||
TestQuickInfoForGenericTaggedTemplateExpression
|
||||
TestQuickInfoForGetterAndSetter
|
||||
TestQuickInfoForIndexerResultWithConstraint
|
||||
TestQuickInfoForNamedTupleMember
|
||||
TestQuickInfoForObjectBindingElementPropertyName04
|
||||
TestQuickInfoForShorthandProperty
|
||||
TestQuickInfoForSyntaxErrorNoError
|
||||
TestQuickInfoForTypeParameterInTypeAlias1
|
||||
TestQuickInfoForTypeParameterInTypeAlias2
|
||||
TestQuickInfoForTypeofParameter
|
||||
TestQuickInfoForUMDModuleAlias
|
||||
TestQuickInfoFromContextualType
|
||||
TestQuickInfoFunctionKeyword
|
||||
TestQuickInfoGenerics
|
||||
TestQuickInfoGetterSetter
|
||||
TestQuickInfoInInvalidIndexSignature
|
||||
TestQuickInfoInJsdocInTsFile1
|
||||
TestQuickInfoInOptionalChain
|
||||
TestQuickInfoInWithBlock
|
||||
TestQuickInfoJSDocBackticks
|
||||
TestQuickInfoJSDocFunctionNew
|
||||
TestQuickInfoJSDocFunctionThis
|
||||
TestQuickInfoJSExport
|
||||
TestQuickInfoJsDocGetterSetterNoCrash1
|
||||
TestQuickInfoJsDocNonDiscriminatedUnionSharedProp
|
||||
TestQuickInfoJsPropertyAssignedAfterMethodDeclaration
|
||||
TestQuickInfoJsdocTypedefMissingType
|
||||
TestQuickInfoMappedSpreadTypes
|
||||
TestQuickInfoMappedType
|
||||
TestQuickInfoMappedTypeMethods
|
||||
TestQuickInfoMappedTypeRecursiveInference
|
||||
TestQuickInfoModuleVariables
|
||||
TestQuickInfoNarrowedTypeOfAliasSymbol
|
||||
TestQuickInfoNestedGenericCalls
|
||||
TestQuickInfoOnArgumentsInsideFunction
|
||||
TestQuickInfoOnCatchVariable
|
||||
TestQuickInfoOnClosingJsx
|
||||
TestQuickInfoOnElementAccessInWriteLocation1
|
||||
TestQuickInfoOnElementAccessInWriteLocation2
|
||||
TestQuickInfoOnElementAccessInWriteLocation3
|
||||
TestQuickInfoOnElementAccessInWriteLocation4
|
||||
TestQuickInfoOnElementAccessInWriteLocation5
|
||||
TestQuickInfoOnErrorTypes1
|
||||
TestQuickInfoOnExpandoLikePropertyWithSetterDeclarationJs1
|
||||
TestQuickInfoOnExpandoLikePropertyWithSetterDeclarationJs2
|
||||
TestQuickInfoOnFunctionPropertyReturnedFromGenericFunction1
|
||||
TestQuickInfoOnFunctionPropertyReturnedFromGenericFunction2
|
||||
TestQuickInfoOnFunctionPropertyReturnedFromGenericFunction3
|
||||
TestQuickInfoOnGenericWithConstraints1
|
||||
TestQuickInfoOnInternalAliases
|
||||
TestQuickInfoOnJsxNamespacedNameWithDoc1
|
||||
TestQuickInfoOnMethodOfImportEquals
|
||||
TestQuickInfoOnNarrowedType
|
||||
TestQuickInfoOnNarrowedTypeInModule
|
||||
TestQuickInfoOnNewKeyword01
|
||||
TestQuickInfoOnObjectLiteralWithAccessors
|
||||
TestQuickInfoOnObjectLiteralWithOnlyGetter
|
||||
TestQuickInfoOnObjectLiteralWithOnlySetter
|
||||
TestQuickInfoOnPropDeclaredUsingIndexSignatureOnInterfaceWithBase
|
||||
TestQuickInfoOnPropertyAccessInWriteLocation1
|
||||
TestQuickInfoOnPropertyAccessInWriteLocation2
|
||||
TestQuickInfoOnPropertyAccessInWriteLocation3
|
||||
TestQuickInfoOnPropertyAccessInWriteLocation4
|
||||
TestQuickInfoOnPropertyAccessInWriteLocation5
|
||||
TestQuickInfoOnThis
|
||||
TestQuickInfoOnThis2
|
||||
TestQuickInfoOnThis3
|
||||
TestQuickInfoOnThis4
|
||||
TestQuickInfoOnUndefined
|
||||
TestQuickInfoOnVarInArrowExpression
|
||||
TestQuickInfoPrivateIdentifierInTypeReferenceNoCrash1
|
||||
TestQuickInfoPropertyTag
|
||||
TestQuickInfoSignatureOptionalParameterFromUnion1
|
||||
TestQuickInfoSignatureRestParameterFromUnion1
|
||||
TestQuickInfoSignatureRestParameterFromUnion2
|
||||
TestQuickInfoSignatureRestParameterFromUnion3
|
||||
TestQuickInfoSignatureRestParameterFromUnion4
|
||||
TestQuickInfoSpecialPropertyAssignment
|
||||
TestQuickInfoStaticPrototypePropertyOnClass
|
||||
TestQuickInfoTemplateTag
|
||||
TestQuickInfoTypeAliasDefinedInDifferentFile
|
||||
TestQuickInfoTypeError
|
||||
TestQuickInfoTypeOfThisInStatics
|
||||
TestQuickInfoTypeOnlyNamespaceAndClass
|
||||
TestQuickInfoUnionOfNamespaces
|
||||
TestQuickInfoUnion_discriminated
|
||||
TestQuickInfoWidenedTypes
|
||||
TestQuickInfo_notInsideComment
|
||||
TestQuickInforForSucessiveInferencesIsNotAny
|
||||
TestQuickinfo01
|
||||
TestQuickinfoForNamespaceMergeWithClassConstrainedToSelf
|
||||
TestQuickinfoForUnionProperty
|
||||
TestQuickinfoWrongComment
|
||||
TestRecursiveInternalModuleImport
|
||||
TestReferencesForStatementKeywords
|
||||
TestReferencesInEmptyFile
|
||||
TestRegexDetection
|
||||
TestRenameForAliasingExport02
|
||||
TestRenameFromNodeModulesDep1
|
||||
TestRenameFromNodeModulesDep2
|
||||
TestRenameFromNodeModulesDep3
|
||||
TestRenameFromNodeModulesDep4
|
||||
TestRenamePrivateFields
|
||||
TestReverseMappedTypeQuickInfo
|
||||
TestSelfReferencedExternalModule
|
||||
TestSignatureHelpInferenceJsDocImportTag
|
||||
TestStringCompletionsImportOrExportSpecifier
|
||||
TestStringCompletionsVsEscaping
|
||||
TestSymbolCompletionLowerPriority
|
||||
TestSyntheticImportFromBabelGeneratedFile1
|
||||
TestSyntheticImportFromBabelGeneratedFile2
|
||||
TestThisBindingInLambda
|
||||
TestThisPredicateFunctionQuickInfo01
|
||||
TestThisPredicateFunctionQuickInfo02
|
||||
TestTripleSlashRefPathCompletionAbsolutePaths
|
||||
TestTripleSlashRefPathCompletionContext
|
||||
TestTripleSlashRefPathCompletionExtensionsAllowJSFalse
|
||||
TestTripleSlashRefPathCompletionExtensionsAllowJSTrue
|
||||
TestTripleSlashRefPathCompletionHiddenFile
|
||||
TestTripleSlashRefPathCompletionRootdirs
|
||||
TestTsxCompletion14
|
||||
TestTsxCompletion15
|
||||
TestTsxCompletionNonTagLessThan
|
||||
TestTsxQuickInfo1
|
||||
TestTsxQuickInfo4
|
||||
TestTsxQuickInfo5
|
||||
TestTsxQuickInfo6
|
||||
TestTsxQuickInfo7
|
||||
TestTypeOperatorNodeBuilding
|
||||
@ -1,71 +0,0 @@
|
||||
import * as fs from "fs";
|
||||
import * as path from "path";
|
||||
|
||||
const scriptsDir = import.meta.dirname;
|
||||
const manualTestsPath = path.join(scriptsDir, "manualTests.txt");
|
||||
const genDir = path.join(scriptsDir, "../", "tests", "gen");
|
||||
const manualDir = path.join(scriptsDir, "../", "tests", "manual");
|
||||
const submoduleDir = path.join(scriptsDir, "../../../", "_submodules", "TypeScript", "tests", "cases", "fourslash");
|
||||
|
||||
function main() {
|
||||
const args = process.argv.slice(2);
|
||||
|
||||
if (args.length === 0) {
|
||||
console.error("Please provide the name of the generated test file.");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const testName = args[0];
|
||||
const testFileName = testName;
|
||||
const genTestFile = path.join(genDir, testFileName + "_test.go");
|
||||
const submoduleTestFile = path.join(submoduleDir, testFileName + ".ts");
|
||||
const submoduleServerTestFile = path.join(submoduleDir, "server", testFileName + ".ts");
|
||||
let testKind: "gen" | "submodule" | "submoduleServer" | undefined;
|
||||
if (fs.existsSync(genTestFile)) {
|
||||
testKind = "gen";
|
||||
}
|
||||
else if (fs.existsSync(submoduleTestFile)) {
|
||||
testKind = "submodule";
|
||||
}
|
||||
else if (fs.existsSync(submoduleServerTestFile)) {
|
||||
testKind = "submoduleServer";
|
||||
}
|
||||
|
||||
if (!testKind) {
|
||||
console.error(
|
||||
`Could not find test neither as '${genTestFile}', nor as '${submoduleTestFile}' or '${submoduleServerTestFile}'.` +
|
||||
`Make sure the test exists in the gen directory or in the submodule.`,
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (!fs.existsSync(manualDir)) {
|
||||
fs.mkdirSync(manualDir, { recursive: true });
|
||||
}
|
||||
|
||||
if (testKind === "gen") {
|
||||
const manualTestFile = path.join(manualDir, path.basename(genTestFile));
|
||||
markAsManual(genTestFile, manualTestFile);
|
||||
}
|
||||
|
||||
let manualTests: string[] = [];
|
||||
if (fs.existsSync(manualTestsPath)) {
|
||||
const content = fs.readFileSync(manualTestsPath, "utf-8");
|
||||
manualTests = content.split("\n").map(line => line.trim()).filter(line => line.length > 0);
|
||||
}
|
||||
|
||||
if (!manualTests.includes(testName)) {
|
||||
manualTests.push(testName);
|
||||
manualTests.sort();
|
||||
fs.writeFileSync(manualTestsPath, [...manualTests, ""].join("\n"), "utf-8");
|
||||
}
|
||||
}
|
||||
|
||||
function markAsManual(genFilePath: string, manualFilePath: string) {
|
||||
const content = fs.readFileSync(genFilePath, "utf-8");
|
||||
const updatedContent = content.replace(/^\s*t\.Skip\(\)\s*$/m, "");
|
||||
fs.writeFileSync(manualFilePath, updatedContent, "utf-8");
|
||||
fs.rmSync(genFilePath);
|
||||
}
|
||||
|
||||
main();
|
||||
@ -1,7 +0,0 @@
|
||||
completionListInClosedFunction05
|
||||
completionsAtIncompleteObjectLiteralProperty
|
||||
completionsSelfDeclaring1
|
||||
completionsWithDeprecatedTag4
|
||||
renameDefaultKeyword
|
||||
renameForDefaultExport01
|
||||
tsxCompletion12
|
||||
@ -1,9 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"strict": true,
|
||||
"noEmit": true,
|
||||
"module": "nodenext",
|
||||
"allowImportingTsExtensions": true,
|
||||
"noFallthroughCasesInSwitch": true
|
||||
}
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
import * as cp from "child_process";
|
||||
import * as fs from "fs";
|
||||
import path from "path";
|
||||
import which from "which";
|
||||
import { main as convertFourslash } from "./convertFourslash.mts";
|
||||
|
||||
const failingTestsPath = path.join(import.meta.dirname, "failingTests.txt");
|
||||
|
||||
function main() {
|
||||
const oldFailingTests = fs.readFileSync(failingTestsPath, "utf-8");
|
||||
fs.writeFileSync(failingTestsPath, "", "utf-8");
|
||||
convertFourslash();
|
||||
const go = which.sync("go");
|
||||
let testOutput: string;
|
||||
try {
|
||||
testOutput = cp.execFileSync(go, ["test", "./internal/fourslash/tests/gen"], { encoding: "utf-8" });
|
||||
}
|
||||
catch (error) {
|
||||
testOutput = (error as { stdout: string; }).stdout as string;
|
||||
}
|
||||
const panicRegex = /^panic/m;
|
||||
if (panicRegex.test(testOutput)) {
|
||||
fs.writeFileSync(failingTestsPath, oldFailingTests, "utf-8");
|
||||
throw new Error("Unrecovered panic detected in tests");
|
||||
}
|
||||
const failRegex = /--- FAIL: ([\S]+)/gm;
|
||||
const failingTests: string[] = [];
|
||||
let match;
|
||||
|
||||
while ((match = failRegex.exec(testOutput)) !== null) {
|
||||
failingTests.push(match[1]);
|
||||
}
|
||||
|
||||
fs.writeFileSync(failingTestsPath, failingTests.sort().join("\n") + "\n", "utf-8");
|
||||
convertFourslash();
|
||||
}
|
||||
|
||||
main();
|
||||
@ -1,609 +0,0 @@
|
||||
package fourslash
|
||||
|
||||
import (
|
||||
"cmp"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"regexp"
|
||||
"slices"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/collections"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/core"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/debug"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/stringutil"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil/baseline"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/vfs"
|
||||
)
|
||||
|
||||
func (f *FourslashTest) addResultToBaseline(t *testing.T, command string, actual string) {
|
||||
b, ok := f.baselines[command]
|
||||
if !ok {
|
||||
f.baselines[command] = &strings.Builder{}
|
||||
b = f.baselines[command]
|
||||
}
|
||||
if b.Len() != 0 {
|
||||
b.WriteString("\n\n\n\n")
|
||||
}
|
||||
b.WriteString(`// === ` + command + " ===\n" + actual)
|
||||
}
|
||||
|
||||
func (f *FourslashTest) writeToBaseline(command string, content string) {
|
||||
b, ok := f.baselines[command]
|
||||
if !ok {
|
||||
f.baselines[command] = &strings.Builder{}
|
||||
b = f.baselines[command]
|
||||
}
|
||||
b.WriteString(content)
|
||||
}
|
||||
|
||||
func getBaselineFileName(t *testing.T, command string) string {
|
||||
return getBaseFileNameFromTest(t) + "." + getBaselineExtension(command)
|
||||
}
|
||||
|
||||
func getBaselineExtension(command string) string {
|
||||
switch command {
|
||||
case "QuickInfo", "SignatureHelp":
|
||||
return "baseline"
|
||||
case "Auto Imports":
|
||||
return "baseline.md"
|
||||
case "findAllReferences", "goToDefinition", "findRenameLocations":
|
||||
return "baseline.jsonc"
|
||||
default:
|
||||
return "baseline.jsonc"
|
||||
}
|
||||
}
|
||||
|
||||
func getBaselineOptions(command string) baseline.Options {
|
||||
subfolder := "fourslash/" + normalizeCommandName(command)
|
||||
switch command {
|
||||
case "findRenameLocations":
|
||||
return baseline.Options{
|
||||
Subfolder: subfolder,
|
||||
IsSubmodule: true,
|
||||
DiffFixupOld: func(s string) string {
|
||||
var commandLines []string
|
||||
commandPrefix := regexp.MustCompile(`^// === ([a-z\sA-Z]*) ===`)
|
||||
testFilePrefix := "/tests/cases/fourslash"
|
||||
serverTestFilePrefix := "/server"
|
||||
contextSpanOpening := "<|"
|
||||
contextSpanClosing := "|>"
|
||||
oldPreference := "providePrefixAndSuffixTextForRename"
|
||||
newPreference := "useAliasesForRename"
|
||||
replacer := strings.NewReplacer(
|
||||
contextSpanOpening, "",
|
||||
contextSpanClosing, "",
|
||||
testFilePrefix, "",
|
||||
serverTestFilePrefix, "",
|
||||
oldPreference, newPreference,
|
||||
)
|
||||
lines := strings.Split(s, "\n")
|
||||
var isInCommand bool
|
||||
for _, line := range lines {
|
||||
if strings.HasPrefix(line, "// @findInStrings: ") || strings.HasPrefix(line, "// @findInComments: ") {
|
||||
continue
|
||||
}
|
||||
matches := commandPrefix.FindStringSubmatch(line)
|
||||
if len(matches) > 0 {
|
||||
commandName := matches[1]
|
||||
if commandName == command {
|
||||
isInCommand = true
|
||||
} else {
|
||||
isInCommand = false
|
||||
}
|
||||
}
|
||||
if isInCommand {
|
||||
fixedLine := replacer.Replace(line)
|
||||
commandLines = append(commandLines, fixedLine)
|
||||
}
|
||||
}
|
||||
return strings.Join(commandLines, "\n")
|
||||
},
|
||||
}
|
||||
default:
|
||||
return baseline.Options{
|
||||
Subfolder: subfolder,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func normalizeCommandName(command string) string {
|
||||
words := strings.Fields(command)
|
||||
command = strings.Join(words, "")
|
||||
return stringutil.LowerFirstChar(command)
|
||||
}
|
||||
|
||||
type baselineFourslashLocationsOptions struct {
|
||||
// markerInfo
|
||||
marker MarkerOrRange // location
|
||||
markerName string // name of the marker to be printed in baseline
|
||||
|
||||
endMarker string
|
||||
|
||||
startMarkerPrefix func(span lsproto.Location) *string
|
||||
endMarkerSuffix func(span lsproto.Location) *string
|
||||
}
|
||||
|
||||
func (f *FourslashTest) getBaselineForLocationsWithFileContents(spans []lsproto.Location, options baselineFourslashLocationsOptions) string {
|
||||
locationsByFile := collections.GroupBy(spans, func(span lsproto.Location) lsproto.DocumentUri { return span.Uri })
|
||||
rangesByFile := collections.MultiMap[lsproto.DocumentUri, lsproto.Range]{}
|
||||
for file, locs := range locationsByFile.M {
|
||||
for _, loc := range locs {
|
||||
rangesByFile.Add(file, loc.Range)
|
||||
}
|
||||
}
|
||||
return f.getBaselineForGroupedLocationsWithFileContents(
|
||||
&rangesByFile,
|
||||
options,
|
||||
)
|
||||
}
|
||||
|
||||
func (f *FourslashTest) getBaselineForGroupedLocationsWithFileContents(groupedRanges *collections.MultiMap[lsproto.DocumentUri, lsproto.Range], options baselineFourslashLocationsOptions) string {
|
||||
// We must always print the file containing the marker,
|
||||
// but don't want to print it twice at the end if it already
|
||||
// found in a file with ranges.
|
||||
foundMarker := false
|
||||
|
||||
baselineEntries := []string{}
|
||||
err := f.vfs.WalkDir("/", func(path string, d vfs.DirEntry, e error) error {
|
||||
if e != nil {
|
||||
return e
|
||||
}
|
||||
|
||||
if !d.Type().IsRegular() {
|
||||
return nil
|
||||
}
|
||||
|
||||
fileName := ls.FileNameToDocumentURI(path)
|
||||
ranges := groupedRanges.Get(fileName)
|
||||
if len(ranges) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
content, ok := f.vfs.ReadFile(path)
|
||||
if !ok {
|
||||
// !!! error?
|
||||
return nil
|
||||
}
|
||||
|
||||
if options.marker != nil && options.marker.FileName() == path {
|
||||
foundMarker = true
|
||||
}
|
||||
|
||||
baselineEntries = append(baselineEntries, f.getBaselineContentForFile(path, content, ranges, nil, options))
|
||||
return nil
|
||||
})
|
||||
|
||||
if err != nil && !errors.Is(err, fs.ErrNotExist) {
|
||||
panic("walkdir error during fourslash baseline: " + err.Error())
|
||||
}
|
||||
|
||||
if !foundMarker && options.marker != nil {
|
||||
// If we didn't find the marker in any file, we need to add it.
|
||||
markerFileName := options.marker.FileName()
|
||||
if content, ok := f.vfs.ReadFile(markerFileName); ok {
|
||||
baselineEntries = append(baselineEntries, f.getBaselineContentForFile(markerFileName, content, nil, nil, options))
|
||||
}
|
||||
}
|
||||
|
||||
// !!! foundAdditionalSpan
|
||||
// !!! skipDocumentContainingOnlyMarker
|
||||
|
||||
return strings.Join(baselineEntries, "\n\n")
|
||||
}
|
||||
|
||||
type baselineDetail struct {
|
||||
pos lsproto.Position
|
||||
positionMarker string
|
||||
span *lsproto.Range
|
||||
kind string
|
||||
}
|
||||
|
||||
func (f *FourslashTest) getBaselineContentForFile(
|
||||
fileName string,
|
||||
content string,
|
||||
spansInFile []lsproto.Range,
|
||||
spanToContextId map[lsproto.Range]int,
|
||||
options baselineFourslashLocationsOptions,
|
||||
) string {
|
||||
details := []*baselineDetail{}
|
||||
detailPrefixes := map[*baselineDetail]string{}
|
||||
detailSuffixes := map[*baselineDetail]string{}
|
||||
canDetermineContextIdInline := true
|
||||
uri := ls.FileNameToDocumentURI(fileName)
|
||||
|
||||
if options.marker != nil && options.marker.FileName() == fileName {
|
||||
details = append(details, &baselineDetail{pos: options.marker.LSPos(), positionMarker: options.markerName})
|
||||
}
|
||||
|
||||
for _, span := range spansInFile {
|
||||
textSpanIndex := len(details)
|
||||
details = append(details,
|
||||
&baselineDetail{pos: span.Start, positionMarker: "[|", span: &span, kind: "textStart"},
|
||||
&baselineDetail{pos: span.End, positionMarker: core.OrElse(options.endMarker, "|]"), span: &span, kind: "textEnd"},
|
||||
)
|
||||
|
||||
if options.startMarkerPrefix != nil {
|
||||
startPrefix := options.startMarkerPrefix(lsproto.Location{Uri: uri, Range: span})
|
||||
if startPrefix != nil {
|
||||
// Special case: if this span starts at the same position as the provided marker,
|
||||
// we want the span's prefix to appear before the marker name.
|
||||
// i.e. We want `/*START PREFIX*/A: /*RENAME*/[|ARENAME|]`,
|
||||
// not `/*RENAME*//*START PREFIX*/A: [|ARENAME|]`
|
||||
if options.marker != nil && fileName == options.marker.FileName() && span.Start == options.marker.LSPos() {
|
||||
_, ok := detailPrefixes[details[0]]
|
||||
debug.Assert(!ok, "Expected only single prefix at marker location")
|
||||
detailPrefixes[details[0]] = *startPrefix
|
||||
} else {
|
||||
detailPrefixes[details[textSpanIndex]] = *startPrefix
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if options.endMarkerSuffix != nil {
|
||||
endSuffix := options.endMarkerSuffix(lsproto.Location{Uri: uri, Range: span})
|
||||
if endSuffix != nil {
|
||||
detailSuffixes[details[textSpanIndex+1]] = *endSuffix
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
slices.SortStableFunc(details, func(d1, d2 *baselineDetail) int {
|
||||
return ls.ComparePositions(d1.pos, d2.pos)
|
||||
})
|
||||
// !!! if canDetermineContextIdInline
|
||||
|
||||
textWithContext := newTextWithContext(fileName, content)
|
||||
|
||||
// Our preferred way to write marker is
|
||||
// /*MARKER*/[| some text |]
|
||||
// [| some /*MARKER*/ text |]
|
||||
// [| some text |]/*MARKER*/
|
||||
// Stable sort should handle first two cases but with that marker will be before rangeEnd if locations match
|
||||
// So we will defer writing marker in this case by checking and finding index of rangeEnd if same
|
||||
var deferredMarkerIndex *int
|
||||
|
||||
for index, detail := range details {
|
||||
if detail.span == nil && deferredMarkerIndex == nil {
|
||||
// If this is marker position and its same as textEnd and/or contextEnd we want to write marker after those
|
||||
for matchingEndPosIndex := index + 1; matchingEndPosIndex < len(details); matchingEndPosIndex++ {
|
||||
// Defer after the location if its same as rangeEnd
|
||||
if details[matchingEndPosIndex].pos == detail.pos && strings.HasSuffix(details[matchingEndPosIndex].kind, "End") {
|
||||
deferredMarkerIndex = ptrTo(matchingEndPosIndex)
|
||||
}
|
||||
// Dont defer further than already determined
|
||||
break
|
||||
}
|
||||
// Defer writing marker position to deffered marker index
|
||||
if deferredMarkerIndex != nil {
|
||||
continue
|
||||
}
|
||||
}
|
||||
textWithContext.add(detail)
|
||||
textWithContext.pos = detail.pos
|
||||
// Prefix
|
||||
prefix := detailPrefixes[detail]
|
||||
if prefix != "" {
|
||||
textWithContext.newContent.WriteString(prefix)
|
||||
}
|
||||
textWithContext.newContent.WriteString(detail.positionMarker)
|
||||
if detail.span != nil {
|
||||
switch detail.kind {
|
||||
case "textStart":
|
||||
var text string
|
||||
if contextId, ok := spanToContextId[*detail.span]; ok {
|
||||
isAfterContextStart := false
|
||||
for textStartIndex := index - 1; textStartIndex >= 0; textStartIndex-- {
|
||||
textStartDetail := details[textStartIndex]
|
||||
if textStartDetail.kind == "contextStart" && textStartDetail.span == detail.span {
|
||||
isAfterContextStart = true
|
||||
break
|
||||
}
|
||||
// Marker is ok to skip over
|
||||
if textStartDetail.span != nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
// Skip contextId on span thats surrounded by context span immediately
|
||||
if !isAfterContextStart {
|
||||
if text == "" {
|
||||
text = fmt.Sprintf(`contextId: %v`, contextId)
|
||||
} else {
|
||||
text = fmt.Sprintf(`contextId: %v`, contextId) + `, ` + text
|
||||
}
|
||||
}
|
||||
}
|
||||
if text != "" {
|
||||
textWithContext.newContent.WriteString(`{ ` + text + ` |}`)
|
||||
}
|
||||
case "contextStart":
|
||||
if canDetermineContextIdInline {
|
||||
spanToContextId[*detail.span] = len(spanToContextId)
|
||||
}
|
||||
}
|
||||
|
||||
if deferredMarkerIndex != nil && *deferredMarkerIndex == index {
|
||||
// Write the marker
|
||||
textWithContext.newContent.WriteString(options.markerName)
|
||||
deferredMarkerIndex = nil
|
||||
detail = details[0] // Marker detail
|
||||
}
|
||||
}
|
||||
if suffix, ok := detailSuffixes[detail]; ok {
|
||||
textWithContext.newContent.WriteString(suffix)
|
||||
}
|
||||
}
|
||||
textWithContext.add(nil)
|
||||
if textWithContext.newContent.Len() != 0 {
|
||||
textWithContext.readableContents.WriteString("\n")
|
||||
textWithContext.readableJsoncBaseline(textWithContext.newContent.String())
|
||||
}
|
||||
return textWithContext.readableContents.String()
|
||||
}
|
||||
|
||||
var lineSplitter = regexp.MustCompile(`\r?\n`)
|
||||
|
||||
type textWithContext struct {
|
||||
nLinesContext int // number of context lines to write to baseline
|
||||
|
||||
readableContents *strings.Builder // builds what will be returned to be written to baseline
|
||||
|
||||
newContent *strings.Builder // helper; the part of the original file content to write between details
|
||||
pos lsproto.Position
|
||||
isLibFile bool
|
||||
fileName string
|
||||
content string // content of the original file
|
||||
lineStarts *ls.LSPLineMap
|
||||
converters *ls.Converters
|
||||
|
||||
// posLineInfo
|
||||
posInfo *lsproto.Position
|
||||
lineInfo int
|
||||
}
|
||||
|
||||
// implements ls.Script
|
||||
func (t *textWithContext) FileName() string {
|
||||
return t.fileName
|
||||
}
|
||||
|
||||
// implements ls.Script
|
||||
func (t *textWithContext) Text() string {
|
||||
return t.content
|
||||
}
|
||||
|
||||
func newTextWithContext(fileName string, content string) *textWithContext {
|
||||
t := &textWithContext{
|
||||
nLinesContext: 4,
|
||||
|
||||
readableContents: &strings.Builder{},
|
||||
|
||||
isLibFile: regexp.MustCompile(`lib.*\.d\.ts$`).MatchString(fileName),
|
||||
newContent: &strings.Builder{},
|
||||
pos: lsproto.Position{Line: 0, Character: 0},
|
||||
fileName: fileName,
|
||||
content: content,
|
||||
lineStarts: ls.ComputeLSPLineStarts(content),
|
||||
}
|
||||
|
||||
t.converters = ls.NewConverters(lsproto.PositionEncodingKindUTF8, func(_ string) *ls.LSPLineMap {
|
||||
return t.lineStarts
|
||||
})
|
||||
t.readableContents.WriteString("// === " + fileName + " ===")
|
||||
return t
|
||||
}
|
||||
|
||||
func (t *textWithContext) add(detail *baselineDetail) {
|
||||
if t.content == "" && detail == nil {
|
||||
panic("Unsupported")
|
||||
}
|
||||
if detail == nil || (detail.kind != "textEnd" && detail.kind != "contextEnd") {
|
||||
// Calculate pos to location number of lines
|
||||
posLineIndex := t.lineInfo
|
||||
if t.posInfo == nil || *t.posInfo != t.pos {
|
||||
posLineIndex = t.lineStarts.ComputeIndexOfLineStart(t.converters.LineAndCharacterToPosition(t, t.pos))
|
||||
}
|
||||
|
||||
locationLineIndex := len(t.lineStarts.LineStarts) - 1
|
||||
if detail != nil {
|
||||
locationLineIndex = t.lineStarts.ComputeIndexOfLineStart(t.converters.LineAndCharacterToPosition(t, detail.pos))
|
||||
t.posInfo = &detail.pos
|
||||
t.lineInfo = locationLineIndex
|
||||
}
|
||||
|
||||
nLines := 0
|
||||
if t.newContent.Len() != 0 {
|
||||
nLines += t.nLinesContext + 1
|
||||
}
|
||||
if detail != nil {
|
||||
nLines += t.nLinesContext + 1
|
||||
}
|
||||
// first nLinesContext and last nLinesContext
|
||||
if locationLineIndex-posLineIndex > nLines {
|
||||
if t.newContent.Len() != 0 {
|
||||
var skippedString string
|
||||
if t.isLibFile {
|
||||
skippedString = "--- (line: --) skipped ---\n"
|
||||
} else {
|
||||
skippedString = fmt.Sprintf(`// --- (line: %v) skipped ---`, posLineIndex+t.nLinesContext+1)
|
||||
}
|
||||
|
||||
t.readableContents.WriteString("\n")
|
||||
t.readableJsoncBaseline(t.newContent.String() + t.sliceOfContent(
|
||||
t.getIndex(t.pos),
|
||||
t.getIndex(t.lineStarts.LineStarts[posLineIndex+t.nLinesContext]),
|
||||
) + skippedString)
|
||||
|
||||
if detail != nil {
|
||||
t.readableContents.WriteString("\n")
|
||||
}
|
||||
t.newContent.Reset()
|
||||
}
|
||||
if detail != nil {
|
||||
if t.isLibFile {
|
||||
t.newContent.WriteString("--- (line: --) skipped ---\n")
|
||||
} else {
|
||||
t.newContent.WriteString(fmt.Sprintf("--- (line: %v) skipped ---\n", locationLineIndex-t.nLinesContext+1))
|
||||
}
|
||||
t.newContent.WriteString(t.sliceOfContent(
|
||||
t.getIndex(t.lineStarts.LineStarts[locationLineIndex-t.nLinesContext+1]),
|
||||
t.getIndex(detail.pos),
|
||||
))
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
if detail == nil {
|
||||
t.newContent.WriteString(t.sliceOfContent(t.getIndex(t.pos), nil))
|
||||
} else {
|
||||
t.newContent.WriteString(t.sliceOfContent(t.getIndex(t.pos), t.getIndex(detail.pos)))
|
||||
}
|
||||
}
|
||||
|
||||
func (t *textWithContext) readableJsoncBaseline(text string) {
|
||||
for i, line := range lineSplitter.Split(text, -1) {
|
||||
if i > 0 {
|
||||
t.readableContents.WriteString("\n")
|
||||
}
|
||||
t.readableContents.WriteString(`// ` + line)
|
||||
}
|
||||
}
|
||||
|
||||
type markerAndItem[T any] struct {
|
||||
Marker *Marker `json:"marker"`
|
||||
Item T `json:"item"`
|
||||
}
|
||||
|
||||
func annotateContentWithTooltips[T comparable](
|
||||
t *testing.T,
|
||||
f *FourslashTest,
|
||||
markersAndItems []markerAndItem[T],
|
||||
opName string,
|
||||
getRange func(item T) *lsproto.Range,
|
||||
getTooltipLines func(item T, prev T) []string,
|
||||
) string {
|
||||
barWithGutter := "| " + strings.Repeat("-", 70)
|
||||
|
||||
// sort by file, then *backwards* by position in the file
|
||||
// so we can insert multiple times on a line without counting
|
||||
sorted := slices.Clone(markersAndItems)
|
||||
slices.SortFunc(sorted, func(a, b markerAndItem[T]) int {
|
||||
if c := cmp.Compare(a.Marker.FileName(), b.Marker.FileName()); c != 0 {
|
||||
return c
|
||||
}
|
||||
return -cmp.Compare(a.Marker.Position, b.Marker.Position)
|
||||
})
|
||||
|
||||
filesToLines := collections.NewOrderedMapWithSizeHint[string, []string](1)
|
||||
var previous T
|
||||
for _, itemAndMarker := range sorted {
|
||||
marker := itemAndMarker.Marker
|
||||
item := itemAndMarker.Item
|
||||
|
||||
textRange := getRange(item)
|
||||
if textRange == nil {
|
||||
start := marker.LSPosition
|
||||
end := start
|
||||
end.Character = end.Character + 1
|
||||
textRange = &lsproto.Range{Start: start, End: end}
|
||||
}
|
||||
|
||||
if textRange.Start.Line != textRange.End.Line {
|
||||
t.Fatalf("Expected text range to be on a single line, got %v", textRange)
|
||||
}
|
||||
underline := strings.Repeat(" ", int(textRange.Start.Character)) +
|
||||
strings.Repeat("^", int(textRange.End.Character-textRange.Start.Character))
|
||||
|
||||
fileName := marker.FileName()
|
||||
lines, ok := filesToLines.Get(fileName)
|
||||
if !ok {
|
||||
lines = lineSplitter.Split(f.getScriptInfo(fileName).content, -1)
|
||||
}
|
||||
|
||||
var tooltipLines []string
|
||||
if item != *new(T) {
|
||||
tooltipLines = getTooltipLines(item, previous)
|
||||
}
|
||||
if len(tooltipLines) == 0 {
|
||||
tooltipLines = []string{fmt.Sprintf("No %s at /*%s*/.", opName, *marker.Name)}
|
||||
}
|
||||
tooltipLines = core.Map(tooltipLines, func(line string) string {
|
||||
return "| " + line
|
||||
})
|
||||
|
||||
linesToInsert := make([]string, len(tooltipLines)+3)
|
||||
linesToInsert[0] = underline
|
||||
linesToInsert[1] = barWithGutter
|
||||
copy(linesToInsert[2:], tooltipLines)
|
||||
linesToInsert[len(linesToInsert)-1] = barWithGutter
|
||||
|
||||
lines = slices.Insert(
|
||||
lines,
|
||||
int(textRange.Start.Line+1),
|
||||
linesToInsert...,
|
||||
)
|
||||
filesToLines.Set(fileName, lines)
|
||||
|
||||
previous = item
|
||||
}
|
||||
|
||||
builder := strings.Builder{}
|
||||
seenFirst := false
|
||||
for fileName, lines := range filesToLines.Entries() {
|
||||
builder.WriteString(fmt.Sprintf("=== %s ===\n", fileName))
|
||||
for _, line := range lines {
|
||||
builder.WriteString("// ")
|
||||
builder.WriteString(line)
|
||||
builder.WriteByte('\n')
|
||||
}
|
||||
|
||||
if seenFirst {
|
||||
builder.WriteString("\n\n")
|
||||
} else {
|
||||
seenFirst = true
|
||||
}
|
||||
}
|
||||
|
||||
return builder.String()
|
||||
}
|
||||
|
||||
func (t *textWithContext) sliceOfContent(start *int, end *int) string {
|
||||
if start == nil || *start < 0 {
|
||||
start = ptrTo(0)
|
||||
}
|
||||
|
||||
if end == nil || *end > len(t.content) {
|
||||
end = ptrTo(len(t.content))
|
||||
}
|
||||
|
||||
if *start > *end {
|
||||
return ""
|
||||
}
|
||||
|
||||
return t.content[*start:*end]
|
||||
}
|
||||
|
||||
func (t *textWithContext) getIndex(i interface{}) *int {
|
||||
switch i := i.(type) {
|
||||
case *int:
|
||||
return i
|
||||
case int:
|
||||
return ptrTo(i)
|
||||
case core.TextPos:
|
||||
return ptrTo(int(i))
|
||||
case *core.TextPos:
|
||||
return ptrTo(int(*i))
|
||||
case lsproto.Position:
|
||||
return t.getIndex(t.converters.LineAndCharacterToPosition(t, i))
|
||||
case *lsproto.Position:
|
||||
return t.getIndex(t.converters.LineAndCharacterToPosition(t, *i))
|
||||
}
|
||||
panic(fmt.Sprintf("getIndex: unsupported type %T", i))
|
||||
}
|
||||
|
||||
func codeFence(lang string, code string) string {
|
||||
return "```" + lang + "\n" + code + "\n```"
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,447 +0,0 @@
|
||||
package fourslash
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"slices"
|
||||
"strings"
|
||||
"testing"
|
||||
"unicode/utf8"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/core"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/stringutil"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testrunner"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/tspath"
|
||||
"github.com/go-json-experiment/json"
|
||||
)
|
||||
|
||||
// Inserted in source files by surrounding desired text
|
||||
// in a range with `[|` and `|]`. For example,
|
||||
//
|
||||
// [|text in range|]
|
||||
//
|
||||
// is a range with `text in range` "selected".
|
||||
type RangeMarker struct {
|
||||
fileName string
|
||||
Range core.TextRange
|
||||
LSRange lsproto.Range
|
||||
Marker *Marker
|
||||
}
|
||||
|
||||
func (r *RangeMarker) LSPos() lsproto.Position {
|
||||
return r.LSRange.Start
|
||||
}
|
||||
|
||||
func (r *RangeMarker) FileName() string {
|
||||
return r.fileName
|
||||
}
|
||||
|
||||
func (r *RangeMarker) GetName() *string {
|
||||
if r.Marker == nil {
|
||||
return nil
|
||||
}
|
||||
return r.Marker.Name
|
||||
}
|
||||
|
||||
type Marker struct {
|
||||
fileName string
|
||||
Position int
|
||||
LSPosition lsproto.Position
|
||||
Name *string // `nil` for anonymous markers such as `{| "foo": "bar" |}`
|
||||
Data map[string]any
|
||||
}
|
||||
|
||||
func (m *Marker) LSPos() lsproto.Position {
|
||||
return m.LSPosition
|
||||
}
|
||||
|
||||
func (m *Marker) FileName() string {
|
||||
return m.fileName
|
||||
}
|
||||
|
||||
func (m *Marker) GetName() *string {
|
||||
return m.Name
|
||||
}
|
||||
|
||||
type MarkerOrRange interface {
|
||||
FileName() string
|
||||
LSPos() lsproto.Position
|
||||
GetName() *string
|
||||
}
|
||||
|
||||
type TestData struct {
|
||||
Files []*TestFileInfo
|
||||
MarkerPositions map[string]*Marker
|
||||
Markers []*Marker
|
||||
Symlinks map[string]string
|
||||
GlobalOptions map[string]string
|
||||
Ranges []*RangeMarker
|
||||
}
|
||||
|
||||
type testFileWithMarkers struct {
|
||||
file *TestFileInfo
|
||||
markers []*Marker
|
||||
ranges []*RangeMarker
|
||||
}
|
||||
|
||||
func ParseTestData(t *testing.T, contents string, fileName string) TestData {
|
||||
// List of all the subfiles we've parsed out
|
||||
var files []*TestFileInfo
|
||||
|
||||
markerPositions := make(map[string]*Marker)
|
||||
var markers []*Marker
|
||||
var ranges []*RangeMarker
|
||||
|
||||
filesWithMarker, symlinks, _, globalOptions, e := testrunner.ParseTestFilesAndSymlinks(
|
||||
contents,
|
||||
fileName,
|
||||
parseFileContent,
|
||||
)
|
||||
if e != nil {
|
||||
t.Fatalf("Error parsing fourslash data: %s", e.Error())
|
||||
}
|
||||
|
||||
hasTSConfig := false
|
||||
for _, file := range filesWithMarker {
|
||||
files = append(files, file.file)
|
||||
hasTSConfig = hasTSConfig || isConfigFile(file.file.fileName)
|
||||
|
||||
markers = append(markers, file.markers...)
|
||||
ranges = append(ranges, file.ranges...)
|
||||
for _, marker := range file.markers {
|
||||
if marker.Name == nil {
|
||||
if marker.Data != nil {
|
||||
// The marker is an anonymous object marker, which does not need a name. Markers are only set into markerPositions if they have a name
|
||||
continue
|
||||
}
|
||||
t.Fatalf(`Marker at position %v is unnamed`, marker.Position)
|
||||
}
|
||||
if existing, ok := markerPositions[*marker.Name]; ok {
|
||||
t.Fatalf(`Duplicate marker name: "%s" at %v and %v`, *marker.Name, marker.Position, existing.Position)
|
||||
}
|
||||
markerPositions[*marker.Name] = marker
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if hasTSConfig && len(globalOptions) > 0 {
|
||||
t.Fatalf("It is not allowed to use global options along with config files.")
|
||||
}
|
||||
|
||||
return TestData{
|
||||
Files: files,
|
||||
MarkerPositions: markerPositions,
|
||||
Markers: markers,
|
||||
Symlinks: symlinks,
|
||||
GlobalOptions: globalOptions,
|
||||
Ranges: ranges,
|
||||
}
|
||||
}
|
||||
|
||||
func isConfigFile(fileName string) bool {
|
||||
fileName = strings.ToLower(fileName)
|
||||
return strings.HasSuffix(fileName, "tsconfig.json") || strings.HasSuffix(fileName, "jsconfig.json")
|
||||
}
|
||||
|
||||
type locationInformation struct {
|
||||
position int
|
||||
sourcePosition int
|
||||
sourceLine int
|
||||
sourceColumn int
|
||||
}
|
||||
|
||||
type rangeLocationInformation struct {
|
||||
locationInformation
|
||||
marker *Marker
|
||||
}
|
||||
|
||||
type TestFileInfo struct {
|
||||
fileName string
|
||||
// The contents of the file (with markers, etc stripped out)
|
||||
Content string
|
||||
emit bool
|
||||
}
|
||||
|
||||
// FileName implements ls.Script.
|
||||
func (t *TestFileInfo) FileName() string {
|
||||
return t.fileName
|
||||
}
|
||||
|
||||
// Text implements ls.Script.
|
||||
func (t *TestFileInfo) Text() string {
|
||||
return t.Content
|
||||
}
|
||||
|
||||
var _ ls.Script = (*TestFileInfo)(nil)
|
||||
|
||||
const emitThisFileOption = "emitthisfile"
|
||||
|
||||
type parserState int
|
||||
|
||||
const (
|
||||
stateNone parserState = iota
|
||||
stateInSlashStarMarker
|
||||
stateInObjectMarker
|
||||
)
|
||||
|
||||
func parseFileContent(fileName string, content string, fileOptions map[string]string) (*testFileWithMarkers, error) {
|
||||
fileName = tspath.GetNormalizedAbsolutePath(fileName, "/")
|
||||
|
||||
// The file content (minus metacharacters) so far
|
||||
var output strings.Builder
|
||||
|
||||
var markers []*Marker
|
||||
|
||||
/// A stack of the open range markers that are still unclosed
|
||||
openRanges := []rangeLocationInformation{}
|
||||
/// A list of closed ranges we've collected so far
|
||||
rangeMarkers := []*RangeMarker{}
|
||||
|
||||
// The total number of metacharacters removed from the file (so far)
|
||||
difference := 0
|
||||
|
||||
// One-based current position data
|
||||
line := 1
|
||||
column := 1
|
||||
|
||||
// The current marker (or maybe multi-line comment?) we're parsing, possibly
|
||||
var openMarker *locationInformation
|
||||
|
||||
// The latest position of the start of an unflushed plain text area
|
||||
lastNormalCharPosition := 0
|
||||
|
||||
flush := func(lastSafeCharIndex int) {
|
||||
if lastSafeCharIndex != -1 {
|
||||
output.WriteString(content[lastNormalCharPosition:lastSafeCharIndex])
|
||||
} else {
|
||||
output.WriteString(content[lastNormalCharPosition:])
|
||||
}
|
||||
}
|
||||
|
||||
state := stateNone
|
||||
previousCharacter, i := utf8.DecodeRuneInString(content)
|
||||
var size int
|
||||
var currentCharacter rune
|
||||
for ; i < len(content); i = i + size {
|
||||
currentCharacter, size = utf8.DecodeRuneInString(content[i:])
|
||||
switch state {
|
||||
case stateNone:
|
||||
if previousCharacter == '[' && currentCharacter == '|' {
|
||||
// found a range start
|
||||
openRanges = append(openRanges, rangeLocationInformation{
|
||||
locationInformation: locationInformation{
|
||||
position: (i - 1) - difference,
|
||||
sourcePosition: i - 1,
|
||||
sourceLine: line,
|
||||
sourceColumn: column,
|
||||
},
|
||||
})
|
||||
// copy all text up to marker position
|
||||
flush(i - 1)
|
||||
lastNormalCharPosition = i + 1
|
||||
difference += 2
|
||||
} else if previousCharacter == '|' && currentCharacter == ']' {
|
||||
// found a range end
|
||||
if len(openRanges) == 0 {
|
||||
return nil, reportError(fileName, line, column, "Found range end with no matching start.")
|
||||
}
|
||||
rangeStart := openRanges[len(openRanges)-1]
|
||||
openRanges = openRanges[:len(openRanges)-1]
|
||||
|
||||
closedRange := &RangeMarker{
|
||||
fileName: fileName,
|
||||
Range: core.NewTextRange(rangeStart.position, (i-1)-difference),
|
||||
Marker: rangeStart.marker,
|
||||
}
|
||||
|
||||
rangeMarkers = append(rangeMarkers, closedRange)
|
||||
|
||||
// copy all text up to range marker position
|
||||
flush(i - 1)
|
||||
lastNormalCharPosition = i + 1
|
||||
difference += 2
|
||||
} else if previousCharacter == '/' && currentCharacter == '*' {
|
||||
// found a possible marker start
|
||||
state = stateInSlashStarMarker
|
||||
openMarker = &locationInformation{
|
||||
position: (i - 1) - difference,
|
||||
sourcePosition: i - 1,
|
||||
sourceLine: line,
|
||||
sourceColumn: column - 1,
|
||||
}
|
||||
} else if previousCharacter == '{' && currentCharacter == '|' {
|
||||
// found an object marker start
|
||||
state = stateInObjectMarker
|
||||
openMarker = &locationInformation{
|
||||
position: (i - 1) - difference,
|
||||
sourcePosition: i - 1,
|
||||
sourceLine: line,
|
||||
sourceColumn: column,
|
||||
}
|
||||
flush(i - 1)
|
||||
}
|
||||
case stateInObjectMarker:
|
||||
// Object markers are only ever terminated by |} and have no content restrictions
|
||||
if previousCharacter == '|' && currentCharacter == '}' {
|
||||
objectMarkerData := strings.TrimSpace(content[openMarker.sourcePosition+2 : i-1])
|
||||
marker, e := getObjectMarker(fileName, openMarker, objectMarkerData)
|
||||
if e != nil {
|
||||
return nil, e
|
||||
}
|
||||
|
||||
if len(openRanges) > 0 {
|
||||
openRanges[len(openRanges)-1].marker = marker
|
||||
}
|
||||
markers = append(markers, marker)
|
||||
|
||||
// Set the current start to point to the end of the current marker to ignore its text
|
||||
lastNormalCharPosition = i + 1
|
||||
difference += i + 1 - openMarker.sourcePosition
|
||||
|
||||
// Reset the state
|
||||
openMarker = nil
|
||||
state = stateNone
|
||||
}
|
||||
case stateInSlashStarMarker:
|
||||
if previousCharacter == '*' && currentCharacter == '/' {
|
||||
// Record the marker
|
||||
// start + 2 to ignore the */, -1 on the end to ignore the * (/ is next)
|
||||
markerNameText := strings.TrimSpace(content[openMarker.sourcePosition+2 : i-1])
|
||||
marker := &Marker{
|
||||
fileName: fileName,
|
||||
Position: openMarker.position,
|
||||
Name: &markerNameText,
|
||||
}
|
||||
if len(openRanges) > 0 {
|
||||
openRanges[len(openRanges)-1].marker = marker
|
||||
}
|
||||
markers = append(markers, marker)
|
||||
|
||||
// Set the current start to point to the end of the current marker to ignore its text
|
||||
flush(openMarker.sourcePosition)
|
||||
lastNormalCharPosition = i + 1
|
||||
difference += i + 1 - openMarker.sourcePosition
|
||||
|
||||
// Reset the state
|
||||
openMarker = nil
|
||||
state = stateNone
|
||||
} else if !(stringutil.IsDigit(currentCharacter) ||
|
||||
stringutil.IsASCIILetter(currentCharacter) ||
|
||||
currentCharacter == '$' ||
|
||||
currentCharacter == '_') { // Invalid marker character
|
||||
if currentCharacter == '*' && i < len(content)-1 && content[i+1] == '/' {
|
||||
// The marker is about to be closed, ignore the 'invalid' char
|
||||
} else {
|
||||
// We've hit a non-valid marker character, so we were actually in a block comment
|
||||
// Bail out the text we've gathered so far back into the output
|
||||
flush(i)
|
||||
lastNormalCharPosition = i
|
||||
openMarker = nil
|
||||
state = stateNone
|
||||
}
|
||||
}
|
||||
}
|
||||
if currentCharacter == '\n' && previousCharacter == '\r' {
|
||||
// Ignore trailing \n after \r
|
||||
continue
|
||||
} else if currentCharacter == '\n' || currentCharacter == '\r' {
|
||||
line++
|
||||
column = 1
|
||||
continue
|
||||
}
|
||||
column++
|
||||
previousCharacter = currentCharacter
|
||||
}
|
||||
|
||||
// Add the remaining text
|
||||
flush(-1)
|
||||
|
||||
if len(openRanges) > 0 {
|
||||
openRange := openRanges[0]
|
||||
return nil, reportError(fileName, openRange.sourceLine, openRange.sourceColumn, "Unterminated range.")
|
||||
}
|
||||
|
||||
if openMarker != nil {
|
||||
return nil, reportError(fileName, openMarker.sourceLine, openMarker.sourceColumn, "Unterminated marker.")
|
||||
}
|
||||
|
||||
outputString := output.String()
|
||||
// Set LS positions for markers
|
||||
lineMap := ls.ComputeLSPLineStarts(outputString)
|
||||
converters := ls.NewConverters(lsproto.PositionEncodingKindUTF8, func(_ string) *ls.LSPLineMap {
|
||||
return lineMap
|
||||
})
|
||||
|
||||
emit := fileOptions[emitThisFileOption] == "true"
|
||||
|
||||
testFileInfo := &TestFileInfo{
|
||||
fileName: fileName,
|
||||
Content: outputString,
|
||||
emit: emit,
|
||||
}
|
||||
|
||||
slices.SortStableFunc(rangeMarkers, func(a, b *RangeMarker) int {
|
||||
if a.Range.Pos() != b.Range.Pos() {
|
||||
return a.Range.Pos() - b.Range.Pos()
|
||||
}
|
||||
return b.Range.End() - a.Range.End()
|
||||
})
|
||||
|
||||
for _, marker := range markers {
|
||||
marker.LSPosition = converters.PositionToLineAndCharacter(testFileInfo, core.TextPos(marker.Position))
|
||||
}
|
||||
for _, rangeMarker := range rangeMarkers {
|
||||
rangeMarker.LSRange = lsproto.Range{
|
||||
Start: converters.PositionToLineAndCharacter(testFileInfo, core.TextPos(rangeMarker.Range.Pos())),
|
||||
End: converters.PositionToLineAndCharacter(testFileInfo, core.TextPos(rangeMarker.Range.End())),
|
||||
}
|
||||
}
|
||||
|
||||
return &testFileWithMarkers{
|
||||
file: testFileInfo,
|
||||
markers: markers,
|
||||
ranges: rangeMarkers,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func getObjectMarker(fileName string, location *locationInformation, text string) (*Marker, error) {
|
||||
// Attempt to parse the marker value as JSON
|
||||
var v interface{}
|
||||
e := json.Unmarshal([]byte("{ "+text+" }"), &v)
|
||||
|
||||
if e != nil {
|
||||
return nil, reportError(fileName, location.sourceLine, location.sourceColumn, "Unable to parse marker text "+text)
|
||||
}
|
||||
markerValue, ok := v.(map[string]interface{})
|
||||
if !ok || len(markerValue) == 0 {
|
||||
return nil, reportError(fileName, location.sourceLine, location.sourceColumn, "Object markers can not be empty")
|
||||
}
|
||||
|
||||
marker := &Marker{
|
||||
fileName: fileName,
|
||||
Position: location.position,
|
||||
Data: markerValue,
|
||||
}
|
||||
|
||||
// Object markers can be anonymous
|
||||
if markerValue["name"] != nil {
|
||||
if name, ok := markerValue["name"].(string); ok && name != "" {
|
||||
marker.Name = &name
|
||||
}
|
||||
}
|
||||
|
||||
return marker, nil
|
||||
}
|
||||
|
||||
func reportError(fileName string, line int, col int, message string) error {
|
||||
return &fourslashError{fmt.Sprintf("%v (%v,%v): %v", fileName, line, col, message)}
|
||||
}
|
||||
|
||||
type fourslashError struct {
|
||||
err string
|
||||
}
|
||||
|
||||
func (e *fourslashError) Error() string {
|
||||
return e.err
|
||||
}
|
||||
@ -1,143 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/core"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAutoImportCompletion1(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: a.ts
|
||||
export const someVar = 10;
|
||||
|
||||
// @Filename: b.ts
|
||||
export const anotherVar = 10;
|
||||
|
||||
// @Filename: c.ts
|
||||
import {someVar} from "./a.ts";
|
||||
someVar;
|
||||
a/**/
|
||||
`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
UserPreferences: &ls.UserPreferences{
|
||||
IncludeCompletionsForModuleExports: core.TSTrue,
|
||||
IncludeCompletionsForImportStatements: core.TSTrue,
|
||||
},
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{"someVar", "anotherVar"},
|
||||
},
|
||||
})
|
||||
f.BaselineAutoImportsCompletions(t, []string{""})
|
||||
}
|
||||
|
||||
func TestAutoImportCompletion2(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: a.ts
|
||||
export const someVar = 10;
|
||||
export const anotherVar = 10;
|
||||
|
||||
// @Filename: c.ts
|
||||
import {someVar} from "./a.ts";
|
||||
someVar;
|
||||
a/**/
|
||||
`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
UserPreferences: &ls.UserPreferences{
|
||||
IncludeCompletionsForModuleExports: core.TSTrue,
|
||||
IncludeCompletionsForImportStatements: core.TSTrue,
|
||||
},
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{"someVar", "anotherVar"},
|
||||
},
|
||||
})
|
||||
f.BaselineAutoImportsCompletions(t, []string{""})
|
||||
}
|
||||
|
||||
func TestAutoImportCompletion3(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: a.ts
|
||||
export const aa = "asdf";
|
||||
export const someVar = 10;
|
||||
export const bb = 10;
|
||||
|
||||
// @Filename: c.ts
|
||||
import { aa, someVar } from "./a.ts";
|
||||
someVar;
|
||||
b/**/
|
||||
`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
UserPreferences: &ls.UserPreferences{
|
||||
IncludeCompletionsForModuleExports: core.TSTrue,
|
||||
IncludeCompletionsForImportStatements: core.TSTrue,
|
||||
},
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{"bb"},
|
||||
},
|
||||
})
|
||||
f.BaselineAutoImportsCompletions(t, []string{""})
|
||||
}
|
||||
|
||||
func TestNodeModulesImportCompletions1Baseline(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @allowJs: true
|
||||
// @module: node18
|
||||
// @Filename: /src/module.mts
|
||||
export {}
|
||||
// @Filename: /src/module.cts
|
||||
export {}
|
||||
// @Filename: /src/module.js
|
||||
export {}
|
||||
// @Filename: /src/decl.d.mts
|
||||
export {}
|
||||
// @Filename: /src/decl.d.cts
|
||||
export {}
|
||||
// @Filename: /src/decl.d.ts
|
||||
export {}
|
||||
// @Filename: /src/js.mjs
|
||||
export {}
|
||||
// @Filename: /src/js.cjs
|
||||
export {}
|
||||
// @Filename: /src/js.js
|
||||
export {}
|
||||
// @Filename: /main.mts
|
||||
import {} from "./src//*1*/"; //note, this test should not work until packagejsonautoimportprovider is implemented
|
||||
import mod = require("./src//*2*/");
|
||||
const m = import("./src//*3*/");
|
||||
// @Filename: /main.cts
|
||||
import {} from "./src//*4*/";
|
||||
import mod = require("./src//*5*/");
|
||||
const m = import("./src//*6*/");
|
||||
// @Filename: /main.ts
|
||||
import {} from "./src//*7*/";
|
||||
import mod = require("./src//*8*/");
|
||||
const m = import("./src//*9*/");`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.BaselineAutoImportsCompletions(t, []string{"1", "3", "6", "9", "2", "4", "5", "7", "8"})
|
||||
}
|
||||
@ -1,42 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestBasicBackspace(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `export {};
|
||||
interface Point {
|
||||
x: number;
|
||||
y: number;/*b*/
|
||||
}
|
||||
declare const p: Point;
|
||||
p./*a*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "a", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{"y"},
|
||||
},
|
||||
})
|
||||
f.GoToMarker(t, "b")
|
||||
f.Backspace(t, 10) // `y: number;`
|
||||
f.VerifyCompletions(t, "a", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Excludes: []string{"y"},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestBasicClassElementKeywords(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `class C {
|
||||
/*a*/
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "a", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionClassElementKeywords,
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,43 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestBasicEdit(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `export {};
|
||||
interface Point {
|
||||
x: number;
|
||||
y: number;
|
||||
}
|
||||
declare const p: Point;
|
||||
p/*a*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToMarker(t, "a")
|
||||
f.Insert(t, ".")
|
||||
f.GoToEOF(t)
|
||||
f.VerifyCompletions(t, nil, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "x",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
},
|
||||
"y",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestBasicGlobalCompletions(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `/*1*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionGlobals,
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,40 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestBasicInterfaceMembers(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `export {};
|
||||
interface Point {
|
||||
x: number;
|
||||
y: number;
|
||||
}
|
||||
declare const p: Point;
|
||||
p./*a*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "a", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "x",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
},
|
||||
"y",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,123 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestBasicJSDocCompletions(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `
|
||||
// @filename: file.js
|
||||
// @allowJs: true
|
||||
/**
|
||||
* @/*1*/
|
||||
*/
|
||||
function foo(x) {
|
||||
return x + 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* /*2*/
|
||||
*/
|
||||
function bar(x, { y }) {
|
||||
return x + y;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} x
|
||||
* /*3*/
|
||||
*/
|
||||
function baz(x, { y }) {
|
||||
return x + y;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} x
|
||||
* @param {object} param1
|
||||
* @param {n/*4*/} param1.y
|
||||
*/
|
||||
function baz(x, { y }) {
|
||||
return x + y;
|
||||
}
|
||||
|
||||
/**
|
||||
* @/*5*/
|
||||
*/
|
||||
function baz(x = 0) {
|
||||
return x * 2;
|
||||
}
|
||||
`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "link",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindKeyword),
|
||||
Detail: PtrTo("link"),
|
||||
},
|
||||
"param",
|
||||
"returns",
|
||||
"param {*} x ",
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"@param",
|
||||
"@param {*} x ",
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "3", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"@param",
|
||||
"@param {object} param1 \n* @param {*} param1.y ",
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "4", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"number",
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "5", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"param {number} [x=0] ",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestBasicMultifileCompletions(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: /a.ts
|
||||
export const foo = { bar: 'baz' };
|
||||
|
||||
// @Filename: /b.ts
|
||||
import { foo } from './a';
|
||||
const test = foo./*1*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "bar",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestBasicQuickInfo(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `
|
||||
/**
|
||||
* Some var
|
||||
*/
|
||||
var someVar/*1*/ = 123;
|
||||
|
||||
/**
|
||||
* Other var
|
||||
* See {@link someVar}
|
||||
*/
|
||||
var otherVar/*2*/ = someVar;
|
||||
|
||||
class Foo/*3*/ {
|
||||
#bar: string;
|
||||
}
|
||||
`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "1", "var someVar: number", "Some var")
|
||||
f.VerifyQuickInfoAt(t, "2", "var otherVar: number", "Other var\nSee `someVar`")
|
||||
}
|
||||
@ -1,42 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestBasicReplaceLine(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `export {};
|
||||
interface Point {
|
||||
x: number;
|
||||
y: number;
|
||||
}
|
||||
declare const p: Point;
|
||||
p./*a*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "a", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{"y"},
|
||||
},
|
||||
})
|
||||
f.ReplaceLine(t, 3, " z: number;") // `y: number;`
|
||||
f.VerifyCompletions(t, "a", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Excludes: []string{"y"},
|
||||
Includes: []fourslash.CompletionsExpectedItem{"z"},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,50 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestChineseCharacterDisplayInHover(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `
|
||||
interface 中文界面 {
|
||||
上居中: string;
|
||||
下居中: string;
|
||||
}
|
||||
|
||||
class 中文类 {
|
||||
获取中文属性(): 中文界面 {
|
||||
return {
|
||||
上居中: "上居中",
|
||||
下居中: "下居中"
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
let /*instanceHover*/实例 = new 中文类();
|
||||
let 属性对象 = 实例./*methodHover*/获取中文属性();`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "instanceHover", "let 实例: 中文类", "")
|
||||
f.VerifyQuickInfoAt(t, "methodHover", "(method) 中文类.获取中文属性(): 中文界面", "")
|
||||
}
|
||||
|
||||
func TestChineseCharacterDisplayInUnionTypes(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `
|
||||
// Test the original issue: Chinese characters in method parameters should display correctly
|
||||
class TSLine {
|
||||
setLengthTextPositionPreset(/*methodParam*/preset: "上居中" | "下居中" | "右居中" | "左居中"): void {}
|
||||
}
|
||||
|
||||
let lines = new TSLine();
|
||||
lines./*method*/setLengthTextPositionPreset;`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
|
||||
// Verify that the method displays Chinese characters correctly in hover (this was the original problem)
|
||||
f.VerifyQuickInfoAt(t, "method", `(method) TSLine.setLengthTextPositionPreset(preset: "上居中" | "下居中" | "右居中" | "左居中"): void`, "")
|
||||
}
|
||||
@ -1,31 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAfterCallExpression(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
|
||||
const content = `let x = someCall() /**/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"satisfies",
|
||||
"as",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,42 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionDetailSignature(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `
|
||||
|
||||
/*a*/
|
||||
|
||||
function foo(x: string): string;
|
||||
function foo(x: number): number;
|
||||
function foo(x: any): any {
|
||||
return x;
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "a", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "foo",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindFunction),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
Detail: PtrTo("function foo(x: string): string\nfunction foo(x: number): number"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,235 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionFilterText1(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `
|
||||
class Foo1 {
|
||||
#bar: number;
|
||||
constructor(bar: number) {
|
||||
this.[|b|]/*1*/
|
||||
}
|
||||
}
|
||||
|
||||
class Foo5 {
|
||||
#bar: number;
|
||||
constructor(bar: number) {
|
||||
this./*5*/
|
||||
}
|
||||
}
|
||||
|
||||
class Foo2 {
|
||||
#bar: number;
|
||||
constructor(bar: number) {
|
||||
this.[|#b|]/*2*/
|
||||
}
|
||||
}
|
||||
|
||||
class Foo6 {
|
||||
#bar: number;
|
||||
constructor(bar: number) {
|
||||
this.[|#|]/*6*/
|
||||
}
|
||||
}
|
||||
|
||||
class Foo3 {
|
||||
#bar: number;
|
||||
constructor(bar: number) {
|
||||
[|b|]/*3*/
|
||||
}
|
||||
}
|
||||
|
||||
class Foo7 {
|
||||
#bar: number;
|
||||
constructor(bar: number) {
|
||||
/*7*/
|
||||
}
|
||||
}
|
||||
|
||||
class Foo4 {
|
||||
#bar: number;
|
||||
constructor(bar: number) {
|
||||
[|#b|]/*4*/
|
||||
}
|
||||
}
|
||||
|
||||
class Foo8 {
|
||||
#bar: number;
|
||||
constructor(bar: number) {
|
||||
[|#|]/*8*/
|
||||
}
|
||||
}
|
||||
`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: &fourslash.EditRange{
|
||||
Insert: f.Ranges()[0],
|
||||
Replace: f.Ranges()[0],
|
||||
},
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "#bar",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
FilterText: PtrTo("bar"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "5", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "#bar",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
FilterText: PtrTo("bar"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: &fourslash.EditRange{
|
||||
Insert: f.Ranges()[1],
|
||||
Replace: f.Ranges()[1],
|
||||
},
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "#bar",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "6", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: &fourslash.EditRange{
|
||||
Insert: f.Ranges()[2],
|
||||
Replace: f.Ranges()[2],
|
||||
},
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "#bar",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "3", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "#bar",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextSuggestedClassMembers)),
|
||||
FilterText: PtrTo("bar"),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
InsertReplaceEdit: &lsproto.InsertReplaceEdit{
|
||||
NewText: "this.#bar",
|
||||
Insert: f.Ranges()[3].LSRange,
|
||||
Replace: f.Ranges()[3].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "7", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "#bar",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextSuggestedClassMembers)),
|
||||
FilterText: PtrTo("bar"),
|
||||
InsertText: PtrTo("this.#bar"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "4", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "#bar",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextSuggestedClassMembers)),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
InsertReplaceEdit: &lsproto.InsertReplaceEdit{
|
||||
NewText: "this.#bar",
|
||||
Insert: f.Ranges()[4].LSRange,
|
||||
Replace: f.Ranges()[4].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "8", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "#bar",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextSuggestedClassMembers)),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
InsertReplaceEdit: &lsproto.InsertReplaceEdit{
|
||||
NewText: "this.#bar",
|
||||
Insert: f.Ranges()[5].LSRange,
|
||||
Replace: f.Ranges()[5].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,64 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionFilterText2(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @strict: true
|
||||
declare const foo1: { bar: string } | undefined;
|
||||
if (true) {
|
||||
foo1[|.|]/*1*/
|
||||
}
|
||||
else {
|
||||
foo1?./*2*/
|
||||
}
|
||||
`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "bar",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
InsertText: PtrTo("?.bar"),
|
||||
FilterText: PtrTo(".bar"),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "?.bar",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "bar",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,152 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionFilterText3(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @strict: true
|
||||
declare const foo1: { b: number; "a bc": string; };
|
||||
if (true) {
|
||||
foo1[|.|]/*1*/
|
||||
}
|
||||
else {
|
||||
foo1[|.a|]/*2*/
|
||||
}
|
||||
|
||||
declare const foo2: { b: number; "a bc": string; } | undefined;
|
||||
if (true) {
|
||||
foo2[|.|]/*3*/
|
||||
} else if (false) {
|
||||
foo2[|.a|]/*4*/
|
||||
} else {
|
||||
foo2[|?.|]/*5*/
|
||||
}
|
||||
`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "a bc",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
InsertText: PtrTo("[\"a bc\"]"),
|
||||
FilterText: PtrTo(".a bc"),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "[\"a bc\"]",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "a bc",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
InsertText: PtrTo("[\"a bc\"]"),
|
||||
FilterText: PtrTo(".a bc"),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "[\"a bc\"]",
|
||||
Range: f.Ranges()[1].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "3", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "a bc",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
InsertText: PtrTo("?.[\"a bc\"]"),
|
||||
FilterText: PtrTo(".a bc"),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "?.[\"a bc\"]",
|
||||
Range: f.Ranges()[2].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "4", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "a bc",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
InsertText: PtrTo("?.[\"a bc\"]"),
|
||||
FilterText: PtrTo(".a bc"),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "?.[\"a bc\"]",
|
||||
Range: f.Ranges()[3].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "5", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "a bc",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
InsertText: PtrTo("?.[\"a bc\"]"),
|
||||
FilterText: PtrTo("?.a bc"),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "?.[\"a bc\"]",
|
||||
Range: f.Ranges()[4].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,43 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionFilterText4(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `declare const x: [number, number];
|
||||
x[|.|]/**/;
|
||||
`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "0",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
SortText: PtrTo(string(ls.SortTextLocationPriority)),
|
||||
InsertText: PtrTo("[0]"),
|
||||
FilterText: PtrTo(".0"),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "[0]",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,26 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionListDefaultTypeArgumentPositionTypeOnly(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `const foo = "foo";
|
||||
function test1<T = /*1*/>() {}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionGlobalTypes,
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,78 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionListInUnclosedTypeArguments(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `let x = 10;
|
||||
type Type = void;
|
||||
declare function f<T>(): void;
|
||||
declare function f2<T, U>(): void;
|
||||
f</*1a*/T/*2a*/y/*3a*/
|
||||
f</*1b*/T/*2b*/y/*3b*/;
|
||||
f</*1c*/T/*2c*/y/*3c*/>
|
||||
f</*1d*/T/*2d*/y/*3d*/>
|
||||
f</*1e*/T/*2e*/y/*3e*/>();
|
||||
|
||||
f2</*1k*/T/*2k*/y/*3k*/,
|
||||
f2</*1l*/T/*2l*/y/*3l*/,{| "newId": true |}T{| "newId": true |}y{| "newId": true |}
|
||||
f2</*1m*/T/*2m*/y/*3m*/,{| "newId": true |}T{| "newId": true |}y{| "newId": true |};
|
||||
f2</*1n*/T/*2n*/y/*3n*/,{| "newId": false |}T{| "newId": false |}y{| "newId": false |}>
|
||||
f2</*1o*/T/*2o*/y/*3o*/,{| "newId": false |}T{| "newId": false |}y{| "newId": false |}>
|
||||
f2</*1p*/T/*2p*/y/*3p*/,{| "newId": true, "typeOnly": true |}T{| "newId": true, "typeOnly": true |}y{| "newId": true, "typeOnly": true |}>();
|
||||
|
||||
f2<typeof /*1uValueOnly*/x, {| "newId": true |}T{| "newId": true |}y{| "newId": true |}
|
||||
|
||||
f2</*1x*/T/*2x*/y/*3x*/, () =>/*4x*/T/*5x*/y/*6x*/
|
||||
f2<() =>/*1y*/T/*2y*/y/*3y*/, () =>/*4y*/T/*5y*/y/*6y*/
|
||||
f2<any, () =>/*1z*/T/*2z*/y/*3z*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToEachMarker(t, nil, func(marker *fourslash.Marker, index int) {
|
||||
markerName := marker.Name
|
||||
valueOnly := markerName != nil && strings.HasSuffix(*markerName, "ValueOnly")
|
||||
commitCharacters := &DefaultCommitCharacters
|
||||
if marker.Data != nil {
|
||||
newId := marker.Data["newId"]
|
||||
typeOnly := marker.Data["typeOnly"]
|
||||
if newId != nil && newId.(bool) && !(typeOnly != nil && typeOnly.(bool)) {
|
||||
commitCharacters = &[]string{".", ";"}
|
||||
}
|
||||
}
|
||||
var includes []fourslash.CompletionsExpectedItem
|
||||
var excludes []string
|
||||
if valueOnly {
|
||||
includes = []fourslash.CompletionsExpectedItem{
|
||||
"x",
|
||||
}
|
||||
excludes = []string{
|
||||
"Type",
|
||||
}
|
||||
} else {
|
||||
includes = []fourslash.CompletionsExpectedItem{
|
||||
"Type",
|
||||
}
|
||||
excludes = []string{
|
||||
"x",
|
||||
}
|
||||
}
|
||||
f.VerifyCompletions(t, marker, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: commitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: includes,
|
||||
Excludes: excludes,
|
||||
},
|
||||
})
|
||||
})
|
||||
}
|
||||
@ -1,36 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionResolveKeyword(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `class C {
|
||||
/*a*/
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "a", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "abstract",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindKeyword),
|
||||
SortText: PtrTo(string(ls.SortTextGlobalsOrKeywords)),
|
||||
Detail: PtrTo("abstract"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,67 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionsInJsxTag(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @jsx: preserve
|
||||
// @Filename: /a.tsx
|
||||
declare namespace JSX {
|
||||
interface Element {}
|
||||
interface IntrinsicElements {
|
||||
div: {
|
||||
/** Doc */
|
||||
foo: string
|
||||
/** Label docs */
|
||||
"aria-label": string
|
||||
}
|
||||
}
|
||||
}
|
||||
class Foo {
|
||||
render() {
|
||||
<div /*1*/ ></div>;
|
||||
<div /*2*/ />
|
||||
}
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, []string{"1", "2"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "aria-label",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
Detail: PtrTo("(property) \"aria-label\": string"),
|
||||
Documentation: &lsproto.StringOrMarkupContent{
|
||||
MarkupContent: &lsproto.MarkupContent{
|
||||
Kind: lsproto.MarkupKindMarkdown,
|
||||
Value: "Label docs",
|
||||
},
|
||||
},
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "foo",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
Detail: PtrTo("(property) foo: string"),
|
||||
Documentation: &lsproto.StringOrMarkupContent{
|
||||
MarkupContent: &lsproto.MarkupContent{
|
||||
Kind: lsproto.MarkupKindMarkdown,
|
||||
Value: "Doc",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionsSelfDeclaring2(t *testing.T) {
|
||||
t.Parallel()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `function f1<T>(x: T) {}
|
||||
f1({ [|abc|]/*1*/ });`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: &fourslash.EditRange{
|
||||
Insert: f.Ranges()[0],
|
||||
Replace: f.Ranges()[0],
|
||||
},
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionGlobalsPlus([]fourslash.CompletionsExpectedItem{
|
||||
"f1",
|
||||
}, false /*noLib*/),
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestDocumentHighlightImportPath(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: /a.ts
|
||||
export const x = 0;
|
||||
|
||||
// @Filename: /b.ts
|
||||
import { x } from "[|./a|]";`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyBaselineDocumentHighlights(t, nil /*preferences*/, f.Ranges()[0])
|
||||
}
|
||||
@ -1,20 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAddDeclareToModule(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `/**/module mAmbient {
|
||||
module m3 { }
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToMarker(t, "")
|
||||
f.Insert(t, "declare ")
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAddDuplicateSetter(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `class C {
|
||||
set foo(value) { }
|
||||
/**/
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToMarker(t, "")
|
||||
f.Insert(t, "set foo(value) { }")
|
||||
}
|
||||
@ -1,21 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAddFunctionAboveMultiLineLambdaExpression(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `/**/
|
||||
() =>
|
||||
// do something
|
||||
0;`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToMarker(t, "")
|
||||
f.Insert(t, "function Foo() { }")
|
||||
}
|
||||
@ -1,28 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAddInterfaceMemberAboveClass(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `
|
||||
interface Intersection {
|
||||
/*insertHere*/
|
||||
}
|
||||
interface Scene { }
|
||||
class /*className*/Sphere {
|
||||
constructor() {
|
||||
}
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "className", "class Sphere", "")
|
||||
f.GoToMarker(t, "insertHere")
|
||||
f.Insert(t, "ray: Ray;")
|
||||
f.VerifyQuickInfoAt(t, "className", "class Sphere", "")
|
||||
}
|
||||
@ -1,26 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAddInterfaceToNotSatisfyConstraint(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `interface A {
|
||||
a: number;
|
||||
}
|
||||
/**/
|
||||
interface C<T extends A> {
|
||||
x: T;
|
||||
}
|
||||
|
||||
var v2: C<B>; // should not work`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToMarker(t, "")
|
||||
f.Insert(t, "interface B { b: string; }")
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAddMemberToModule(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `module A {
|
||||
/*var*/
|
||||
}
|
||||
module /*check*/A {
|
||||
var p;
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToMarker(t, "check")
|
||||
f.VerifyQuickInfoExists(t)
|
||||
f.GoToMarker(t, "var")
|
||||
f.Insert(t, "var o;")
|
||||
f.GoToMarker(t, "check")
|
||||
f.VerifyQuickInfoExists(t)
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAddSignaturePartial(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = ``
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.Insert(t, "interface Number { toFixed")
|
||||
f.Insert(t, "(")
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAliasMergingWithNamespace(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `namespace bar { }
|
||||
import bar = bar/**/;`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "", "namespace bar\nimport bar = bar", "")
|
||||
}
|
||||
@ -1,23 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAliasToVarUsedAsType(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `/**/
|
||||
module A {
|
||||
export var X;
|
||||
import Z = A.X;
|
||||
var v: Z;
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToMarker(t, "")
|
||||
f.Insert(t, " ")
|
||||
}
|
||||
@ -1,22 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAmbientShorthandFindAllRefs(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: declarations.d.ts
|
||||
declare module "jquery";
|
||||
// @Filename: user.ts
|
||||
import {/*1*/x} from "jquery";
|
||||
// @Filename: user2.ts
|
||||
import {/*2*/x} from "jquery";`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyBaselineFindAllReferences(t, "1", "2")
|
||||
}
|
||||
@ -1,28 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAmbientShorthandGotoDefinition(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: declarations.d.ts
|
||||
declare module /*module*/"jquery"
|
||||
// @Filename: user.ts
|
||||
///<reference path="declarations.d.ts"/>
|
||||
import [|/*importFoo*/foo|], {bar} from "jquery";
|
||||
import * as [|/*importBaz*/baz|] from "jquery";
|
||||
import [|/*importBang*/bang|] = require("jquery");
|
||||
[|foo/*useFoo*/|]([|bar/*useBar*/|], [|baz/*useBaz*/|], [|bang/*useBang*/|]);`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "useFoo", "(alias) module \"jquery\"\nimport foo", "")
|
||||
f.VerifyQuickInfoAt(t, "useBar", "(alias) module \"jquery\"\nimport bar", "")
|
||||
f.VerifyQuickInfoAt(t, "useBaz", "(alias) module \"jquery\"\nimport baz", "")
|
||||
f.VerifyQuickInfoAt(t, "useBang", "(alias) module \"jquery\"\nimport bang = require(\"jquery\")", "")
|
||||
f.VerifyBaselineGoToDefinition(t, "useFoo", "importFoo", "useBar", "useBaz", "importBaz", "useBang", "importBang")
|
||||
}
|
||||
@ -1,42 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestArgumentsAreAvailableAfterEditsAtEndOfFunction(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `module Test1 {
|
||||
class Person {
|
||||
children: string[];
|
||||
constructor(public name: string, children: string[]) {
|
||||
/**/
|
||||
}
|
||||
}
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToMarker(t, "")
|
||||
f.Insert(t, "this.children = ch")
|
||||
f.VerifyCompletions(t, nil, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "children",
|
||||
Detail: PtrTo("(parameter) children: string[]"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,20 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestArgumentsIndexExpression(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `function f() {
|
||||
var x = /**/arguments[0];
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToMarker(t, "")
|
||||
f.VerifyQuickInfoExists(t)
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestArrayCallAndConstructTypings(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `var a/*1*/1 = new Array();
|
||||
var a/*2*/2 = new Array(1);
|
||||
var a/*3*/3 = new Array<boolean>();
|
||||
var a/*4*/4 = new Array<boolean>(1);
|
||||
var a/*5*/5 = new Array("s");
|
||||
var a/*6*/6 = Array();
|
||||
var a/*7*/7 = Array(1);
|
||||
var a/*8*/8 = Array<boolean>();
|
||||
var a/*9*/9 = Array<boolean>(1);
|
||||
var a/*10*/10 = Array("s");`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "1", "var a1: any[]", "")
|
||||
f.VerifyQuickInfoAt(t, "2", "var a2: any[]", "")
|
||||
f.VerifyQuickInfoAt(t, "3", "var a3: boolean[]", "")
|
||||
f.VerifyQuickInfoAt(t, "4", "var a4: boolean[]", "")
|
||||
f.VerifyQuickInfoAt(t, "5", "var a5: string[]", "")
|
||||
f.VerifyQuickInfoAt(t, "6", "var a6: any[]", "")
|
||||
f.VerifyQuickInfoAt(t, "7", "var a7: any[]", "")
|
||||
f.VerifyQuickInfoAt(t, "8", "var a8: boolean[]", "")
|
||||
f.VerifyQuickInfoAt(t, "9", "var a9: boolean[]", "")
|
||||
f.VerifyQuickInfoAt(t, "10", "var a10: string[]", "")
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAsOperatorCompletion2(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `type T = number;
|
||||
var x;
|
||||
var y = x as /**/
|
||||
`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"T",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,31 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAsOperatorCompletion3(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `type T = number;
|
||||
var x;
|
||||
var y = x as /**/ // comment`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"T",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,31 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAsOperatorCompletion(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `type T = number;
|
||||
var x;
|
||||
var y = x as /**/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"T",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,17 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAssertContextualType(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `<(aa: number) =>void >(function myFn(b/**/b) { });`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "", "(parameter) bb: number", "")
|
||||
}
|
||||
@ -1,53 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAugmentedTypesClass1(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `class c5b { public foo() { } }
|
||||
module c5b { export var y = 2; } // should be ok
|
||||
c5b./*1*/
|
||||
var r = new c5b();
|
||||
r./*2*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "prototype",
|
||||
Detail: PtrTo("(property) c5b.prototype: c5b"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.Insert(t, "y;")
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "foo",
|
||||
Detail: PtrTo("(method) c5b.foo(): void"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,37 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAugmentedTypesClass3Fourslash(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `class c/*1*/5b { public foo() { } }
|
||||
namespace c/*2*/5b { export var y = 2; } // should be ok
|
||||
/*3*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "1", "class c5b\nnamespace c5b", "")
|
||||
f.VerifyQuickInfoAt(t, "2", "class c5b\nnamespace c5b", "")
|
||||
f.VerifyCompletions(t, "3", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "c5b",
|
||||
Detail: PtrTo("class c5b\nnamespace c5b"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAugmentedTypesModule1(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `module m1c {
|
||||
export interface I { foo(): void; }
|
||||
}
|
||||
var m1c = 1; // Should be allowed
|
||||
var x: m1c./*1*/;
|
||||
var /*2*/r = m1c;`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
"I",
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyQuickInfoAt(t, "2", "var r: number", "")
|
||||
}
|
||||
@ -1,49 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAugmentedTypesModule4(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `module m3d { export var y = 2; }
|
||||
declare class m3d { foo(): void }
|
||||
var /*1*/r = new m3d();
|
||||
r./*2*/
|
||||
var /*4*/r2 = m3d./*3*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "1", "var r: m3d", "")
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
"foo",
|
||||
},
|
||||
},
|
||||
})
|
||||
f.Insert(t, "foo();")
|
||||
f.VerifyCompletions(t, "3", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"y",
|
||||
},
|
||||
},
|
||||
})
|
||||
f.Insert(t, "y;")
|
||||
f.VerifyQuickInfoAt(t, "4", "var r2: number", "")
|
||||
}
|
||||
@ -1,49 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAugmentedTypesModule5(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `declare class m3e { foo(): void }
|
||||
module m3e { export var y = 2; }
|
||||
var /*1*/r = new m3e();
|
||||
r./*2*/
|
||||
var /*4*/r2 = m3e./*3*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "1", "var r: m3e", "")
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
"foo",
|
||||
},
|
||||
},
|
||||
})
|
||||
f.Insert(t, "foo();")
|
||||
f.VerifyCompletions(t, "3", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"y",
|
||||
},
|
||||
},
|
||||
})
|
||||
f.Insert(t, "y;")
|
||||
f.VerifyQuickInfoAt(t, "4", "var r2: number", "")
|
||||
}
|
||||
@ -1,44 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAutoImportProvider_referencesCrash(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: /home/src/workspaces/project/a/package.json
|
||||
{}
|
||||
// @Filename: /home/src/workspaces/project/a/tsconfig.json
|
||||
{}
|
||||
// @Filename: /home/src/workspaces/project/a/index.ts
|
||||
class A {}
|
||||
// @Filename: /home/src/workspaces/project/a/index.d.ts
|
||||
declare class A {
|
||||
}
|
||||
//# sourceMappingURL=index.d.ts.map
|
||||
// @Filename: /home/src/workspaces/project/a/index.d.ts.map
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAC;CAAG"}
|
||||
// @Filename: /home/src/workspaces/project/b/tsconfig.json
|
||||
{
|
||||
"compilerOptions": { "disableSourceOfProjectReferenceRedirect": true },
|
||||
"references": [{ "path": "../a" }]
|
||||
}
|
||||
// @Filename: /home/src/workspaces/project/b/b.ts
|
||||
/// <reference path="../a/index.d.ts" />
|
||||
new A/**/();
|
||||
// @Filename: /home/src/workspaces/project/c/package.json
|
||||
{ "dependencies": { "a": "*" } }
|
||||
// @Filename: /home/src/workspaces/project/c/tsconfig.json
|
||||
{ "references" [{ "path": "../a" }] }
|
||||
// @Filename: /home/src/workspaces/project/c/index.ts
|
||||
export {};
|
||||
// @link: /home/src/workspaces/project/a -> /home/src/workspaces/project/c/node_modules/a`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToFile(t, "/home/src/workspaces/project/c/index.ts")
|
||||
f.VerifyBaselineFindAllReferences(t, "")
|
||||
}
|
||||
@ -1,37 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestAutoImportsWithRootDirsAndRootedPath01(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: /dir/foo.ts
|
||||
export function foo() {}
|
||||
// @Filename: /dir/bar.ts
|
||||
/*$*/
|
||||
// @Filename: /dir/tsconfig.json
|
||||
{
|
||||
"compilerOptions": {
|
||||
"module": "amd",
|
||||
"moduleResolution": "classic",
|
||||
"rootDirs": ["D:/"]
|
||||
}
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToMarker(t, "$")
|
||||
f.VerifyCompletions(t, nil, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{},
|
||||
})
|
||||
}
|
||||
@ -1,38 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestBasicClassMembers(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `class n {
|
||||
constructor (public x: number, public y: number, private z: string) { }
|
||||
}
|
||||
var t = new n(0, 1, '');`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.GoToEOF(t)
|
||||
f.Insert(t, "t.")
|
||||
f.VerifyCompletions(t, nil, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"x",
|
||||
"y",
|
||||
},
|
||||
Excludes: []string{
|
||||
"z",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestBestCommonTypeObjectLiterals1(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `var a = { name: 'bob', age: 18 };
|
||||
var b = { name: 'jim', age: 20 };
|
||||
var /*1*/c = [a, b];
|
||||
var a1 = { name: 'bob', age: 18 };
|
||||
var b1 = { name: 'jim', age: 20, dob: new Date() };
|
||||
var /*2*/c1 = [a1, b1];
|
||||
var a2 = { name: 'bob', age: 18, address: 'springfield' };
|
||||
var b2 = { name: 'jim', age: 20, dob: new Date() };
|
||||
var /*3*/c2 = [a2, b2];
|
||||
interface I {
|
||||
name: string;
|
||||
age: number;
|
||||
}
|
||||
var i: I;
|
||||
var /*4*/c3 = [i, a];`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "4", "var c3: I[]", "")
|
||||
f.VerifyQuickInfoAt(t, "1", "var c: {\n name: string;\n age: number;\n}[]", "")
|
||||
f.VerifyQuickInfoAt(t, "2", "var c1: {\n name: string;\n age: number;\n}[]", "")
|
||||
f.VerifyQuickInfoAt(t, "3", "var c2: ({\n name: string;\n age: number;\n address: string;\n} | {\n name: string;\n age: number;\n dob: Date;\n})[]", "")
|
||||
f.VerifyQuickInfoAt(t, "4", "var c3: I[]", "")
|
||||
}
|
||||
@ -1,34 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestBestCommonTypeObjectLiterals(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `var a = { name: 'bob', age: 18 };
|
||||
var b = { name: 'jim', age: 20 };
|
||||
var /*1*/c = [a, b];
|
||||
var a1 = { name: 'bob', age: 18 };
|
||||
var b1 = { name: 'jim', age: 20, dob: new Date() };
|
||||
var /*2*/c1 = [a1, b1];
|
||||
var a2 = { name: 'bob', age: 18, address: 'springfield' };
|
||||
var b2 = { name: 'jim', age: 20, dob: new Date() };
|
||||
var /*3*/c2 = [a2, b2];
|
||||
interface I {
|
||||
name: string;
|
||||
age: number;
|
||||
}
|
||||
var i: I;
|
||||
var /*4*/c3 = [i, a];`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "1", "var c: {\n name: string;\n age: number;\n}[]", "")
|
||||
f.VerifyQuickInfoAt(t, "2", "var c1: {\n name: string;\n age: number;\n}[]", "")
|
||||
f.VerifyQuickInfoAt(t, "3", "var c2: ({\n name: string;\n age: number;\n address: string;\n} | {\n name: string;\n age: number;\n dob: Date;\n})[]", "")
|
||||
f.VerifyQuickInfoAt(t, "4", "var c3: I[]", "")
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestClassInterfaceInsert(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `interface Intersection {
|
||||
dist: number;
|
||||
}
|
||||
/*interfaceGoesHere*/
|
||||
class /*className*/Sphere {
|
||||
constructor(private center) {
|
||||
}
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "className", "class Sphere", "")
|
||||
f.GoToMarker(t, "interfaceGoesHere")
|
||||
f.Insert(t, "\ninterface Surface {\n reflect: () => number;\n}\n")
|
||||
f.VerifyQuickInfoAt(t, "className", "class Sphere", "")
|
||||
}
|
||||
@ -1,19 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestClosedCommentsInConstructor(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `class Foo {
|
||||
constructor(/* /**/ */) { }
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", nil)
|
||||
}
|
||||
@ -1,42 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCodeCompletionEscaping(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: a.js
|
||||
// @allowJs: true
|
||||
___foo; __foo;/**/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "__foo",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindText),
|
||||
SortText: PtrTo(string(ls.SortTextJavascriptIdentifiers)),
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "___foo",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindText),
|
||||
SortText: PtrTo(string(ls.SortTextJavascriptIdentifiers)),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,85 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCommentsEnumsFourslash(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `/** Enum of colors*/
|
||||
enum /*1*/Colors {
|
||||
/** Fancy name for 'blue'*/
|
||||
/*2*/Cornflower,
|
||||
/** Fancy name for 'pink'*/
|
||||
/*3*/FancyPink
|
||||
}
|
||||
var /*4*/x = /*5*/Colors./*6*/Cornflower;
|
||||
x = Colors./*7*/FancyPink;`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "1", "enum Colors", "Enum of colors")
|
||||
f.VerifyQuickInfoAt(t, "2", "(enum member) Colors.Cornflower = 0", "Fancy name for 'blue'")
|
||||
f.VerifyQuickInfoAt(t, "3", "(enum member) Colors.FancyPink = 1", "Fancy name for 'pink'")
|
||||
f.VerifyQuickInfoAt(t, "4", "var x: Colors", "")
|
||||
f.VerifyQuickInfoAt(t, "5", "enum Colors", "Enum of colors")
|
||||
f.VerifyQuickInfoAt(t, "6", "(enum member) Colors.Cornflower = 0", "Fancy name for 'blue'")
|
||||
f.VerifyQuickInfoAt(t, "7", "(enum member) Colors.FancyPink = 1", "Fancy name for 'pink'")
|
||||
f.VerifyCompletions(t, "5", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "Colors",
|
||||
Detail: PtrTo("enum Colors"),
|
||||
Documentation: &lsproto.StringOrMarkupContent{
|
||||
MarkupContent: &lsproto.MarkupContent{
|
||||
Kind: lsproto.MarkupKindMarkdown,
|
||||
Value: "Enum of colors",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, []string{"6", "7"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "Cornflower",
|
||||
Detail: PtrTo("(enum member) Colors.Cornflower = 0"),
|
||||
Documentation: &lsproto.StringOrMarkupContent{
|
||||
MarkupContent: &lsproto.MarkupContent{
|
||||
Kind: lsproto.MarkupKindMarkdown,
|
||||
Value: "Fancy name for 'blue'",
|
||||
},
|
||||
},
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "FancyPink",
|
||||
Detail: PtrTo("(enum member) Colors.FancyPink = 1"),
|
||||
Documentation: &lsproto.StringOrMarkupContent{
|
||||
MarkupContent: &lsproto.MarkupContent{
|
||||
Kind: lsproto.MarkupKindMarkdown,
|
||||
Value: "Fancy name for 'pink'",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,151 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCommentsLinePreservation(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `/** This is firstLine
|
||||
* This is second Line
|
||||
*
|
||||
* This is fourth Line
|
||||
*/
|
||||
var /*a*/a: string;
|
||||
/**
|
||||
* This is firstLine
|
||||
* This is second Line
|
||||
*
|
||||
* This is fourth Line
|
||||
*/
|
||||
var /*b*/b: string;
|
||||
/**
|
||||
* This is firstLine
|
||||
* This is second Line
|
||||
*
|
||||
* This is fourth Line
|
||||
*
|
||||
*/
|
||||
var /*c*/c: string;
|
||||
/**
|
||||
* This is firstLine
|
||||
* This is second Line
|
||||
* @param param
|
||||
* @random tag This should be third line
|
||||
*/
|
||||
function /*d*/d(param: string) { /*1*/param = "hello"; }
|
||||
/**
|
||||
* This is firstLine
|
||||
* This is second Line
|
||||
* @param param
|
||||
*/
|
||||
function /*e*/e(param: string) { /*2*/param = "hello"; }
|
||||
/**
|
||||
* This is firstLine
|
||||
* This is second Line
|
||||
* @param param1 first line of param
|
||||
*
|
||||
* param information third line
|
||||
* @random tag This should be third line
|
||||
*/
|
||||
function /*f*/f(param1: string) { /*3*/param1 = "hello"; }
|
||||
/**
|
||||
* This is firstLine
|
||||
* This is second Line
|
||||
* @param param1
|
||||
*
|
||||
* param information first line
|
||||
* @random tag This should be third line
|
||||
*/
|
||||
function /*g*/g(param1: string) { /*4*/param1 = "hello"; }
|
||||
/**
|
||||
* This is firstLine
|
||||
* This is second Line
|
||||
* @param param1
|
||||
*
|
||||
* param information first line
|
||||
*
|
||||
* param information third line
|
||||
* @random tag This should be third line
|
||||
*/
|
||||
function /*h*/h(param1: string) { /*5*/param1 = "hello"; }
|
||||
/**
|
||||
* This is firstLine
|
||||
* This is second Line
|
||||
* @param param1
|
||||
*
|
||||
* param information first line
|
||||
*
|
||||
* param information third line
|
||||
*
|
||||
*/
|
||||
function /*i*/i(param1: string) { /*6*/param1 = "hello"; }
|
||||
/**
|
||||
* This is firstLine
|
||||
* This is second Line
|
||||
* @param param1
|
||||
*
|
||||
* param information first line
|
||||
*
|
||||
* param information third line
|
||||
*/
|
||||
function /*j*/j(param1: string) { /*7*/param1 = "hello"; }
|
||||
/**
|
||||
* This is firstLine
|
||||
* This is second Line
|
||||
* @param param1 hello @randomtag
|
||||
*
|
||||
* random information first line
|
||||
*
|
||||
* random information third line
|
||||
*/
|
||||
function /*k*/k(param1: string) { /*8*/param1 = "hello"; }
|
||||
/**
|
||||
* This is firstLine
|
||||
* This is second Line
|
||||
* @param param1 first Line text
|
||||
*
|
||||
* @param param1
|
||||
*
|
||||
* blank line that shouldnt be shown when starting this
|
||||
* second time information about the param again
|
||||
*/
|
||||
function /*l*/l(param1: string) { /*9*/param1 = "hello"; }
|
||||
/**
|
||||
* This is firstLine
|
||||
This is second Line
|
||||
[1]: third * line
|
||||
@param param1 first Line text
|
||||
second line text
|
||||
*/
|
||||
function /*m*/m(param1: string) { /*10*/param1 = "hello"; }`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "a", "var a: string", "This is firstLine\nThis is second Line\n\nThis is fourth Line")
|
||||
f.VerifyQuickInfoAt(t, "b", "var b: string", "This is firstLine\nThis is second Line\n\nThis is fourth Line")
|
||||
f.VerifyQuickInfoAt(t, "c", "var c: string", "This is firstLine\nThis is second Line\n\nThis is fourth Line")
|
||||
f.VerifyQuickInfoAt(t, "d", "function d(param: string): void", "This is firstLine\nThis is second Line")
|
||||
f.VerifyQuickInfoAt(t, "1", "(parameter) param: string", "")
|
||||
f.VerifyQuickInfoAt(t, "e", "function e(param: string): void", "This is firstLine\nThis is second Line")
|
||||
f.VerifyQuickInfoAt(t, "2", "(parameter) param: string", "")
|
||||
f.VerifyQuickInfoAt(t, "f", "function f(param1: string): void", "This is firstLine\nThis is second Line")
|
||||
f.VerifyQuickInfoAt(t, "3", "(parameter) param1: string", "first line of param\n\nparam information third line")
|
||||
f.VerifyQuickInfoAt(t, "g", "function g(param1: string): void", "This is firstLine\nThis is second Line")
|
||||
f.VerifyQuickInfoAt(t, "4", "(parameter) param1: string", " param information first line")
|
||||
f.VerifyQuickInfoAt(t, "h", "function h(param1: string): void", "This is firstLine\nThis is second Line")
|
||||
f.VerifyQuickInfoAt(t, "5", "(parameter) param1: string", " param information first line\n\n param information third line")
|
||||
f.VerifyQuickInfoAt(t, "i", "function i(param1: string): void", "This is firstLine\nThis is second Line")
|
||||
f.VerifyQuickInfoAt(t, "6", "(parameter) param1: string", " param information first line\n\n param information third line")
|
||||
f.VerifyQuickInfoAt(t, "j", "function j(param1: string): void", "This is firstLine\nThis is second Line")
|
||||
f.VerifyQuickInfoAt(t, "7", "(parameter) param1: string", " param information first line\n\n param information third line")
|
||||
f.VerifyQuickInfoAt(t, "k", "function k(param1: string): void", "This is firstLine\nThis is second Line")
|
||||
f.VerifyQuickInfoAt(t, "8", "(parameter) param1: string", "hello")
|
||||
f.VerifyQuickInfoAt(t, "l", "function l(param1: string): void", "This is firstLine\nThis is second Line")
|
||||
f.VerifyQuickInfoAt(t, "9", "(parameter) param1: string", "first Line text\nblank line that shouldnt be shown when starting this \nsecond time information about the param again")
|
||||
f.VerifyQuickInfoAt(t, "m", "function m(param1: string): void", "This is firstLine\nThis is second Line\n[1]: third * line")
|
||||
f.VerifyQuickInfoAt(t, "10", "(parameter) param1: string", "first Line text\nsecond line text")
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCommentsUnion(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `var a: Array<string> | Array<number>;
|
||||
a./*1*/length`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyQuickInfoAt(t, "1", "(property) Array<T>.length: number", "Gets or sets the length of the array. This is a number one higher than the highest index in the array.")
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAfterAtChar(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `@a/**/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionGlobals,
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAfterBackslashFollowingString(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `Harness.newLine = ""\n/**/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionGlobals,
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,29 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAfterBrace(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `
|
||||
}/**/
|
||||
`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionGlobals,
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAfterDotDotDot(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `.../**/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionGlobals,
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAfterNewline2(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `let foo = 5 as const /*1*/
|
||||
/*2*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", nil)
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionGlobalsPlus(
|
||||
[]fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "foo",
|
||||
},
|
||||
}, false),
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,36 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAfterNewline(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `let foo /*1*/
|
||||
/*2*/
|
||||
/*3*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", nil)
|
||||
f.VerifyCompletions(t, []string{"2", "3"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionGlobalsPlus(
|
||||
[]fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "foo",
|
||||
},
|
||||
}, false),
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,91 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAfterQuestionDot(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @strict: true
|
||||
class User {
|
||||
#foo: User;
|
||||
bar: User;
|
||||
address?: {
|
||||
city: string;
|
||||
"postal code": string;
|
||||
};
|
||||
constructor() {
|
||||
this.address[|?./*1*/|];
|
||||
this[|?./*2*/|];
|
||||
this?.bar[|?./*3*/|];
|
||||
}
|
||||
};`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "city",
|
||||
Detail: PtrTo("(property) city: string"),
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "postal code",
|
||||
InsertText: PtrTo("?.[\"postal code\"]"),
|
||||
Detail: PtrTo("(property) \"postal code\": string"),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "postal code",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "address",
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "bar",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "3", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "address",
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "bar",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,40 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAmbientPropertyDeclaration(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `class C {
|
||||
/*1*/ declare property: number;
|
||||
/*2*/
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionClassElementKeywords,
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionClassElementKeywords,
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,37 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAsKeyword(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `const x = this /*1*/
|
||||
function foo() {
|
||||
const x = this /*2*/
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, []string{"1", "2"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "as",
|
||||
SortText: PtrTo(string(ls.SortTextGlobalsOrKeywords)),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAtCaseClause(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `case /**/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionGlobals,
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,27 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAtDottedNamespace(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `namespace wwer./**/w`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,59 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionAutoInsertQuestionDot(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @strict: true
|
||||
interface User {
|
||||
address?: {
|
||||
city: string;
|
||||
"postal code": string;
|
||||
}
|
||||
};
|
||||
declare const user: User;
|
||||
user.address[|./**/|]`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "city",
|
||||
InsertText: PtrTo("?.city"),
|
||||
Detail: PtrTo("(property) city: string"),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "city",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "postal code",
|
||||
InsertText: PtrTo("?.[\"postal code\"]"),
|
||||
Detail: PtrTo("(property) \"postal code\": string"),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "postal code",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,45 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionCloneQuestionToken(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: /file2.ts
|
||||
type TCallback<T = any> = (options: T) => any;
|
||||
type InKeyOf<E> = { [K in keyof E]?: TCallback<E[K]>; };
|
||||
export class Bar<A> {
|
||||
baz(a: InKeyOf<A>): void { }
|
||||
}
|
||||
// @Filename: /file1.ts
|
||||
import { Bar } from './file2';
|
||||
type TwoKeys = Record<'a' | 'b', { thisFails?: any; }>
|
||||
class Foo extends Bar<TwoKeys> {
|
||||
/**/
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "baz",
|
||||
InsertText: PtrTo("baz(a: { a?: (options: { thisFails?: any; }) => any; b?: (options: { thisFails?: any; }) => any; }): void {\n}"),
|
||||
FilterText: PtrTo("baz"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,103 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionDetailsOfContextSensitiveParameterNoCrash(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @strict: true
|
||||
type __ = never;
|
||||
|
||||
interface CurriedFunction1<T1, R> {
|
||||
(): CurriedFunction1<T1, R>;
|
||||
(t1: T1): R;
|
||||
}
|
||||
interface CurriedFunction2<T1, T2, R> {
|
||||
(): CurriedFunction2<T1, T2, R>;
|
||||
(t1: T1): CurriedFunction1<T2, R>;
|
||||
(t1: __, t2: T2): CurriedFunction1<T1, R>;
|
||||
(t1: T1, t2: T2): R;
|
||||
}
|
||||
|
||||
interface CurriedFunction3<T1, T2, T3, R> {
|
||||
(): CurriedFunction3<T1, T2, T3, R>;
|
||||
(t1: T1): CurriedFunction2<T2, T3, R>;
|
||||
(t1: __, t2: T2): CurriedFunction2<T1, T3, R>;
|
||||
(t1: T1, t2: T2): CurriedFunction1<T3, R>;
|
||||
(t1: __, t2: __, t3: T3): CurriedFunction2<T1, T2, R>;
|
||||
(t1: T1, t2: __, t3: T3): CurriedFunction1<T2, R>;
|
||||
(t1: __, t2: T2, t3: T3): CurriedFunction1<T1, R>;
|
||||
(t1: T1, t2: T2, t3: T3): R;
|
||||
}
|
||||
|
||||
interface CurriedFunction4<T1, T2, T3, T4, R> {
|
||||
(): CurriedFunction4<T1, T2, T3, T4, R>;
|
||||
(t1: T1): CurriedFunction3<T2, T3, T4, R>;
|
||||
(t1: __, t2: T2): CurriedFunction3<T1, T3, T4, R>;
|
||||
(t1: T1, t2: T2): CurriedFunction2<T3, T4, R>;
|
||||
(t1: __, t2: __, t3: T3): CurriedFunction3<T1, T2, T4, R>;
|
||||
(t1: __, t2: __, t3: T3): CurriedFunction2<T2, T4, R>;
|
||||
(t1: __, t2: T2, t3: T3): CurriedFunction2<T1, T4, R>;
|
||||
(t1: T1, t2: T2, t3: T3): CurriedFunction1<T4, R>;
|
||||
(t1: __, t2: __, t3: __, t4: T4): CurriedFunction3<T1, T2, T3, R>;
|
||||
(t1: T1, t2: __, t3: __, t4: T4): CurriedFunction2<T2, T3, R>;
|
||||
(t1: __, t2: T2, t3: __, t4: T4): CurriedFunction2<T1, T3, R>;
|
||||
(t1: __, t2: __, t3: T3, t4: T4): CurriedFunction2<T1, T2, R>;
|
||||
(t1: T1, t2: T2, t3: __, t4: T4): CurriedFunction1<T3, R>;
|
||||
(t1: T1, t2: __, t3: T3, t4: T4): CurriedFunction1<T2, R>;
|
||||
(t1: __, t2: T2, t3: T3, t4: T4): CurriedFunction1<T1, R>;
|
||||
(t1: T1, t2: T2, t3: T3, t4: T4): R;
|
||||
}
|
||||
|
||||
declare var curry: {
|
||||
<T1, R>(func: (t1: T1) => R, arity?: number): CurriedFunction1<T1, R>;
|
||||
<T1, T2, R>(func: (t1: T1, t2: T2) => R, arity?: number): CurriedFunction2<T1, T2, R>;
|
||||
<T1, T2, T3, R>(func: (t1: T1, t2: T2, t3: T3) => R, arity?: number): CurriedFunction3<T1, T2, T3, R>;
|
||||
<T1, T2, T3, T4, R>(func: (t1: T1, t2: T2, t3: T3, t4: T4) => R, arity?: number): CurriedFunction4<T1, T2, T3, T4, R>;
|
||||
(func: (...args: any[]) => any, arity?: number): (...args: any[]) => any;
|
||||
placeholder: __;
|
||||
};
|
||||
|
||||
export type StylingFunction = (
|
||||
keys: (string | false | undefined) | (string | false | undefined)[],
|
||||
...rest: unknown[]
|
||||
) => object;
|
||||
|
||||
declare const getStylingByKeys: (
|
||||
mergedStyling: object,
|
||||
keys: (string | false | undefined) | (string | false | undefined)[],
|
||||
...args: unknown[]
|
||||
) => object;
|
||||
|
||||
declare var mergedStyling: object;
|
||||
|
||||
export const createStyling: CurriedFunction3<
|
||||
(base16Theme: object) => unknown,
|
||||
object | undefined,
|
||||
object | undefined,
|
||||
StylingFunction
|
||||
> = curry<
|
||||
(base16Theme: object) => unknown,
|
||||
object | undefined,
|
||||
object | undefined,
|
||||
StylingFunction
|
||||
>(
|
||||
(
|
||||
getStylingFromBase16: (base16Theme: object) => unknown,
|
||||
options: object = {},
|
||||
themeOrStyling: object = {},
|
||||
...args
|
||||
): StylingFunction => {
|
||||
return curry(getStylingByKeys, 2)(mergedStyling, .../**/args);
|
||||
},
|
||||
3
|
||||
);`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyBaselineHover(t)
|
||||
}
|
||||
@ -1,45 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryAfterASIExpressionInClass(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `class Parent {
|
||||
protected shouldWork() {
|
||||
console.log();
|
||||
}
|
||||
}
|
||||
|
||||
class Child extends Parent {
|
||||
// this assumes ASI, but on next line wants to
|
||||
x = () => 1
|
||||
shoul/*insideid*/
|
||||
}
|
||||
|
||||
class ChildTwo extends Parent {
|
||||
// this assumes ASI, but on next line wants to
|
||||
x = () => 1
|
||||
/*root*/ //nothing
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, []string{"insideid", "root"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"shouldWork",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,45 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryClassMembersWithInferredFunctionReturnType1(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @filename: /tokenizer.ts
|
||||
export default abstract class Tokenizer {
|
||||
errorBuilder() {
|
||||
return (pos: number, lineStart: number, curLine: number) => {};
|
||||
}
|
||||
}
|
||||
// @filename: /expression.ts
|
||||
import Tokenizer from "./tokenizer.js";
|
||||
|
||||
export default abstract class ExpressionParser extends Tokenizer {
|
||||
/**/
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "errorBuilder",
|
||||
InsertText: PtrTo("errorBuilder(): (pos: number, lineStart: number, curLine: number) => void {\n}"),
|
||||
FilterText: PtrTo("errorBuilder"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,33 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryForArgumentConstrainedToString(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `declare function test<P extends "a" | "b">(p: P): void;
|
||||
|
||||
test(/*ts*/)
|
||||
`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, []string{"ts"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"\"a\"",
|
||||
"\"b\"",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryForArrayElementConstrainedToString2(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `declare function test<T extends 'a' | 'b'>(a: { foo: T[] }): void
|
||||
|
||||
test({ foo: ['a', /*ts*/] })`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, []string{"ts"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"\"a\"",
|
||||
"\"b\"",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryForArrayElementConstrainedToString(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `declare function test<T extends 'a' | 'b'>(a: { foo: T[] }): void
|
||||
|
||||
test({ foo: [/*ts*/] })`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, []string{"ts"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"\"a\"",
|
||||
"\"b\"",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,52 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryForClassMembers_StaticWhenBaseTypeIsNotResolved(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: /node_modules/@types/react/index.d.ts
|
||||
export = React;
|
||||
export as namespace React;
|
||||
declare namespace React {
|
||||
function createElement(): any;
|
||||
interface Component<P = {}, S = {}, SS = any> { }
|
||||
class Component<P, S> {
|
||||
static contextType?: any;
|
||||
context: any;
|
||||
constructor(props: Readonly<P>);
|
||||
setState<K extends keyof S>(
|
||||
state: ((prevState: Readonly<S>, props: Readonly<P>) => (Pick<S, K> | S | null)) | (Pick<S, K> | S | null),
|
||||
callback?: () => void
|
||||
): void;
|
||||
}
|
||||
}
|
||||
// @Filename: /a.ts
|
||||
import React from 'react'
|
||||
class Slider extends React.Component {
|
||||
static defau/**/ltProps = {
|
||||
onMouseDown: () => { },
|
||||
onMouseUp: () => { },
|
||||
unit: 'px',
|
||||
}
|
||||
handleChange = () => 10;
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &[]string{},
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: CompletionClassElementKeywords,
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,71 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryForConst(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `const c = "s";
|
||||
/*1*/
|
||||
const d = 1
|
||||
d/*2*/
|
||||
const e = 1
|
||||
/*3*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, []string{"1"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "c",
|
||||
Detail: PtrTo("const c: \"s\""),
|
||||
Kind: PtrTo(lsproto.CompletionItemKindVariable),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, []string{"2"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "d",
|
||||
Detail: PtrTo("const d: 1"),
|
||||
Kind: PtrTo(lsproto.CompletionItemKindVariable),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, []string{"3"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "e",
|
||||
Detail: PtrTo("const e: 1"),
|
||||
Kind: PtrTo(lsproto.CompletionItemKindVariable),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,37 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryForDeferredMappedTypeMembers(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `// @Filename: test.ts
|
||||
interface A { a: A }
|
||||
declare let a: A;
|
||||
type Deep<T> = { [K in keyof T]: Deep<T[K]> }
|
||||
declare function foo<T>(deep: Deep<T>): T;
|
||||
const out = foo(a);
|
||||
out./*1*/a
|
||||
out.a./*2*/a
|
||||
out.a.a./*3*/a`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, f.Markers(), &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
"a",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,32 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryForPropertyConstrainedToString(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `declare function test<P extends "a" | "b">(p: { type: P }): void;
|
||||
|
||||
test({ type: /*ts*/ })`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, []string{"ts"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
"\"a\"",
|
||||
"\"b\"",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,42 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryForPropertyFromUnionOfModuleType(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `module E {
|
||||
export var n = 1;
|
||||
export var x = 0;
|
||||
}
|
||||
module F {
|
||||
export var n = 1;
|
||||
export var y = 0;
|
||||
}
|
||||
var q: typeof E | typeof F;
|
||||
var j = q./*1*/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "n",
|
||||
Detail: PtrTo("(property) n: number"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,33 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryForShorthandPropertyAssignment(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `var person: {name:string; id:number} = {n/**/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "name",
|
||||
Kind: PtrTo(lsproto.CompletionItemKindField),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,88 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryForUnionProperty2(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `interface One {
|
||||
commonProperty: string;
|
||||
commonFunction(): number;
|
||||
anotherProperty: Record<string, number>;
|
||||
}
|
||||
|
||||
interface Two {
|
||||
commonProperty: number;
|
||||
commonFunction(): number;
|
||||
anotherProperty: { foo: number }
|
||||
}
|
||||
|
||||
var x : One | Two;
|
||||
|
||||
x.commonProperty./*1*/;
|
||||
x.anotherProperty./*2*/;`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "toLocaleString",
|
||||
Detail: PtrTo("(method) toLocaleString(): string (+1 overload)"),
|
||||
Documentation: &lsproto.StringOrMarkupContent{
|
||||
MarkupContent: &lsproto.MarkupContent{
|
||||
Kind: lsproto.MarkupKindMarkdown,
|
||||
Value: "Returns a date converted to a string using the current locale.",
|
||||
},
|
||||
},
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "toString",
|
||||
Detail: PtrTo("(method) toString(): string (+1 overload)"),
|
||||
Documentation: &lsproto.StringOrMarkupContent{
|
||||
MarkupContent: &lsproto.MarkupContent{
|
||||
Kind: lsproto.MarkupKindMarkdown,
|
||||
Value: "Returns a string representation of a string.",
|
||||
},
|
||||
},
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "valueOf",
|
||||
Detail: PtrTo("(method) valueOf(): string | number"),
|
||||
Documentation: &lsproto.StringOrMarkupContent{
|
||||
MarkupContent: &lsproto.MarkupContent{
|
||||
Kind: lsproto.MarkupKindMarkdown,
|
||||
Value: "Returns the primitive value of the specified object.",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "foo",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,49 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryForUnionProperty(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `interface One {
|
||||
commonProperty: number;
|
||||
commonFunction(): number;
|
||||
}
|
||||
|
||||
interface Two {
|
||||
commonProperty: string
|
||||
commonFunction(): number;
|
||||
}
|
||||
|
||||
var x : One | Two;
|
||||
|
||||
x./**/`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "commonFunction",
|
||||
Detail: PtrTo("(method) commonFunction(): number"),
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "commonProperty",
|
||||
Detail: PtrTo("(property) commonProperty: string | number"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,71 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionEntryOnNarrowedType(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `function foo(strOrNum: string | number) {
|
||||
/*1*/
|
||||
if (typeof strOrNum === "number") {
|
||||
strOrNum/*2*/;
|
||||
}
|
||||
else {
|
||||
strOrNum/*3*/;
|
||||
}
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "strOrNum",
|
||||
Detail: PtrTo("(parameter) strOrNum: string | number"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "strOrNum",
|
||||
Detail: PtrTo("(parameter) strOrNum: number"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "3", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "strOrNum",
|
||||
Detail: PtrTo("(parameter) strOrNum: string"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionExportFrom(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `export * /*1*/;
|
||||
export {} /*2*/;`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, []string{"1", "2"}, &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Includes: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "from",
|
||||
SortText: PtrTo(string(ls.SortTextGlobalsOrKeywords)),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,50 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/ls"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionForComputedStringProperties(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `const p2 = "p2";
|
||||
interface A {
|
||||
["p1"]: string;
|
||||
[p2]: string;
|
||||
}
|
||||
declare const a: A;
|
||||
a[|./**/|]`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "p1",
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "p2",
|
||||
InsertText: PtrTo("[p2]"),
|
||||
SortText: PtrTo(string(ls.SortTextGlobalsOrKeywords)),
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "p2",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,60 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionForMetaProperty(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Skip()
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `import./*1*/;
|
||||
new./*2*/;
|
||||
function test() { new./*3*/ }`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "meta",
|
||||
Detail: PtrTo("(property) ImportMetaExpression.meta: ImportMeta"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "2", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "3", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "target",
|
||||
Detail: PtrTo("(property) NewTargetExpression.target: () => void"),
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,68 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionForQuotedPropertyInPropertyAssignment1(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `export interface Configfiles {
|
||||
jspm: string;
|
||||
'jspm:browser': string;
|
||||
}
|
||||
let files: Configfiles;
|
||||
files = {
|
||||
/*0*/: '',
|
||||
'[|/*1*/|]': ''
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "0", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
"\"jspm:browser\"",
|
||||
"jspm",
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "jspm",
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "jspm",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "jspm:browser",
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "jspm:browser",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,73 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionForQuotedPropertyInPropertyAssignment2(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = `export interface Config {
|
||||
files: ConfigFiles
|
||||
}
|
||||
export interface ConfigFiles {
|
||||
jspm: string;
|
||||
'jspm:browser': string;
|
||||
}
|
||||
let config: Config;
|
||||
config = {
|
||||
files: {
|
||||
/*0*/: '',
|
||||
'[|/*1*/|]': ''
|
||||
}
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "0", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
"\"jspm:browser\"",
|
||||
"jspm",
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "jspm",
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "jspm",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "jspm:browser",
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "jspm:browser",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
@ -1,72 +0,0 @@
|
||||
package fourslash_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash"
|
||||
. "efprojects.com/kitten-ipc/kitcom/internal/tsgo/fourslash/tests/util"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/lsp/lsproto"
|
||||
"efprojects.com/kitten-ipc/kitcom/internal/tsgo/testutil"
|
||||
)
|
||||
|
||||
func TestCompletionForQuotedPropertyInPropertyAssignment3(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer testutil.RecoverAndFail(t, "Panic on fourslash test")
|
||||
const content = ` let configFiles1: {
|
||||
jspm: string;
|
||||
'jspm:browser': string;
|
||||
} = {
|
||||
/*0*/: "",
|
||||
}
|
||||
let configFiles2: {
|
||||
jspm: string;
|
||||
'jspm:browser': string;
|
||||
} = {
|
||||
jspm: "",
|
||||
'[|/*1*/|]': ""
|
||||
}`
|
||||
f := fourslash.NewFourslash(t, nil /*capabilities*/, content)
|
||||
f.VerifyCompletions(t, "0", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
"\"jspm:browser\"",
|
||||
"jspm",
|
||||
},
|
||||
},
|
||||
})
|
||||
f.VerifyCompletions(t, "1", &fourslash.CompletionsExpectedList{
|
||||
IsIncomplete: false,
|
||||
ItemDefaults: &fourslash.CompletionsExpectedItemDefaults{
|
||||
CommitCharacters: &DefaultCommitCharacters,
|
||||
EditRange: Ignored,
|
||||
},
|
||||
Items: &fourslash.CompletionsExpectedItems{
|
||||
Exact: []fourslash.CompletionsExpectedItem{
|
||||
&lsproto.CompletionItem{
|
||||
Label: "jspm",
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "jspm",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
&lsproto.CompletionItem{
|
||||
Label: "jspm:browser",
|
||||
TextEdit: &lsproto.TextEditOrInsertReplaceEdit{
|
||||
TextEdit: &lsproto.TextEdit{
|
||||
NewText: "jspm:browser",
|
||||
Range: f.Ranges()[0].LSRange,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user