@@ -173,6 +173,11 @@ namespace ts.Completions {
173
173
// var y = require("/*completion position*/");
174
174
return getStringLiteralCompletionEntriesFromModuleNames ( < StringLiteral > node , compilerOptions , host , typeChecker ) ;
175
175
}
176
+ else if ( isEqualityExpression ( node . parent ) ) {
177
+ // Get all known external module names or complete a path to a module
178
+ // i.e. x === '/*completion position'
179
+ return getStringLiteralCompletionEntriesFromBinaryExpression ( < StringLiteral > node , node . parent , typeChecker ) ;
180
+ }
176
181
else {
177
182
const argumentInfo = SignatureHelp . getImmediatelyContainingArgumentInfo ( node , position , sourceFile ) ;
178
183
if ( argumentInfo ) {
@@ -240,6 +245,18 @@ namespace ts.Completions {
240
245
return undefined ;
241
246
}
242
247
248
+ function getStringLiteralCompletionEntriesFromBinaryExpression ( node : StringLiteral , parent : BinaryExpression , typeChecker : TypeChecker ) : CompletionInfo | undefined {
249
+ const type = typeChecker . getTypeAtLocation ( parent . left === node ? parent . right : parent . left ) ;
250
+ if ( type ) {
251
+ const entries : CompletionEntry [ ] = [ ] ;
252
+ addStringLiteralCompletionsFromType ( type , entries , typeChecker ) ;
253
+ if ( entries . length ) {
254
+ return { isGlobalCompletion : false , isMemberCompletion : false , isNewIdentifierLocation : false , entries } ;
255
+ }
256
+ }
257
+ return undefined ;
258
+ }
259
+
243
260
function addStringLiteralCompletionsFromType ( type : Type , result : Push < CompletionEntry > , typeChecker : TypeChecker ) : void {
244
261
if ( type && type . flags & TypeFlags . TypeParameter ) {
245
262
type = typeChecker . getApparentType ( type ) ;
@@ -1756,4 +1773,11 @@ namespace ts.Completions {
1756
1773
catch ( e ) { }
1757
1774
return undefined ;
1758
1775
}
1776
+
1777
+ function isEqualityExpression ( node : Node ) : node is BinaryExpression {
1778
+ return isBinaryExpression ( node ) && ( node . operatorToken . kind == SyntaxKind . EqualsEqualsToken ||
1779
+ node . operatorToken . kind === SyntaxKind . ExclamationEqualsToken ||
1780
+ node . operatorToken . kind === SyntaxKind . EqualsEqualsEqualsToken ||
1781
+ node . operatorToken . kind === SyntaxKind . ExclamationEqualsEqualsToken ) ;
1782
+ }
1759
1783
}
0 commit comments