Merge pull request #14984 from Microsoft/backtick

Support backticks in require calls
This commit is contained in:
Andy 2017-04-03 10:39:25 -07:00 committed by GitHub
commit 45e44cee06
3 changed files with 29 additions and 10 deletions

View File

@ -1564,7 +1564,7 @@ namespace ts {
}
function resolveExternalModuleNameWorker(location: Node, moduleReferenceExpression: Expression, moduleNotFoundError: DiagnosticMessage, isForAugmentation = false): Symbol {
if (moduleReferenceExpression.kind !== SyntaxKind.StringLiteral) {
if (moduleReferenceExpression.kind !== SyntaxKind.StringLiteral && moduleReferenceExpression.kind !== SyntaxKind.NoSubstitutionTemplateLiteral) {
return;
}

View File

@ -1404,17 +1404,24 @@ namespace ts {
/**
* Returns true if the node is a CallExpression to the identifier 'require' with
* exactly one argument.
* exactly one argument (of the form 'require("name")').
* This function does not test if the node is in a JavaScript file or not.
*/
export function isRequireCall(expression: Node, checkArgumentIsStringLiteral: boolean): expression is CallExpression {
// of the form 'require("name")'
const isRequire = expression.kind === SyntaxKind.CallExpression &&
(<CallExpression>expression).expression.kind === SyntaxKind.Identifier &&
(<Identifier>(<CallExpression>expression).expression).text === "require" &&
(<CallExpression>expression).arguments.length === 1;
*/
export function isRequireCall(callExpression: Node, checkArgumentIsStringLiteral: boolean): callExpression is CallExpression {
if (callExpression.kind !== SyntaxKind.CallExpression) {
return false;
}
const { expression, arguments } = callExpression as CallExpression;
return isRequire && (!checkArgumentIsStringLiteral || (<CallExpression>expression).arguments[0].kind === SyntaxKind.StringLiteral);
if (expression.kind !== SyntaxKind.Identifier || (expression as Identifier).text !== "require") {
return false;
}
if (arguments.length !== 1) {
return false;
}
const arg = arguments[0];
return !checkArgumentIsStringLiteral || arg.kind === SyntaxKind.StringLiteral || arg.kind === SyntaxKind.NoSubstitutionTemplateLiteral;
}
export function isSingleOrDoubleQuote(charCode: number) {

View File

@ -0,0 +1,12 @@
///<reference path="fourslash.ts" />
// @allowJs: true
// @Filename: a.js
//// exports.x = 0;
// @Filename: consumer.js
//// var a = require(`./a`);
//// a./**/;
goTo.marker();
verify.completionListContains("x");