public void TestRelativeReferenceIsNotCollected(string content) { var parser = new Parser(); var sourceFile = parser.ParseSourceFileContent(content); var referenceResolver = new ModuleReferenceResolver(PathTable); var references = referenceResolver.GetExternalModuleReferences(sourceFile).ToArray(); XAssert.AreEqual(0, references.Length); }
public void TestImportExportsAreCollected(string content) { var parser = new Parser(); var sourceFile = parser.ParseSourceFileContent(content); var referenceResolver = new ModuleReferenceResolver(PathTable); var references = referenceResolver.GetExternalModuleReferences(sourceFile).ToArray(); XAssert.AreEqual(1, references.Length); XAssert.AreEqual("Foo", references[0].Name); }
public void TestUpdateExternalModuleReference() { var content = @"const x = 42"; var parser = new Parser(); var sourceFile = parser.ParseSourceFileContent(content); var referenceResolver = new ModuleReferenceResolver(PathTable); var module = ModuleDefinition.CreateModuleDefinitionWithExplicitReferencesWithEmptyQualifierSpace( ModuleDescriptor.CreateForTesting("Test"), m_fakeMainFile, m_fakeModuleConfigFile, new[] { m_fakeMainFile }, PathTable); Failure failure; var result = referenceResolver.TryUpdateExternalModuleReference(sourceFile, module, out failure); XAssert.IsTrue(result); XAssert.IsTrue(sourceFile.ResolvedModules.ContainsKey("Test")); }
private static void CheckProjectLikeImportFromIsNotInV2Specs(INode node, DiagnosticContext context) { var callExpression = node.Cast <ICallExpression>(); // If the project belongs to a module with implicit references and the expression is an importFrom, then the specifier cannot be // project-like if (context.Workspace.SpecBelongsToImplicitSemanticsModule(context.SourceFile.GetAbsolutePath(context.PathTable)) && callExpression.IsImportFrom()) { var moduleSpecifier = callExpression.Arguments[0].Cast <IStringLiteral>(); if (ModuleReferenceResolver.IsValidModuleReference(moduleSpecifier) && !ModuleReferenceResolver.IsModuleReference(moduleSpecifier)) { context.Logger.ReportProjectLikeImportOrExportNotAllowedInModuleWithImplicitSemantics( context.LoggingContext, node.LocationForLogging(context.SourceFile), callExpression.Arguments[0].GetFormattedText()); } } }
private static void CheckProjectLikeImportsOrExportsNotInV2Specs(INode node, DiagnosticContext context) { IExpression specifier = node.GetModuleSpecifier(); var literalExpression = specifier?.As <IStringLiteral>(); // There is a lint rule that enforces this, but it might have not run yet if (literalExpression == null || literalExpression.LiteralKind == LiteralExpressionKind.None) { return; } // If the spec belongs to a module with implicit references, then project-like imports are not allowed if (context.Workspace.SpecBelongsToImplicitSemanticsModule(context.SourceFile.GetAbsolutePath(context.PathTable)) && !ModuleReferenceResolver.IsModuleReference(literalExpression)) { context.Logger.ReportProjectLikeImportOrExportNotAllowedInModuleWithImplicitSemantics( context.LoggingContext, node.LocationForLogging(context.SourceFile), specifier.GetFormattedText()); } }
public void TestInternalReferencesOutsideModuleAreNotAllowed() { var content = "import * as Foo from \"./DoesNotExist.dsc\";"; var parser = new Parser(); var sourceFile = parser.ParseSourceFileContent(m_fakeMainFile.ToString(PathTable), content); var referenceResolver = new ModuleReferenceResolver(PathTable); var module = ModuleDefinition.CreateModuleDefinitionWithExplicitReferencesWithEmptyQualifierSpace( ModuleDescriptor.CreateForTesting("Test"), m_fakeMainFile, m_fakeModuleConfigFile, new[] { m_fakeMainFile }, PathTable); Failure[] failures; var result = referenceResolver.TryUpdateAllInternalModuleReferences(sourceFile, module, out failures); XAssert.IsFalse(result); XAssert.AreEqual(1, failures.Length); XAssert.IsTrue(failures[0] is SpecNotUnderAModuleFailure); }
public void TestUpdateInternalModuleReferences(string internalReference) { var content = "import * as Foo from \"" + internalReference + "\";"; // We create a module with a fake main file at the root and one project under SubDir var projectDir = AbsolutePath.Create(PathTable, A("c", "SubDir", "project.dsc")); var parser = new Parser(); var sourceFile = parser.ParseSourceFileContent(projectDir.ToString(PathTable), content); var referenceResolver = new ModuleReferenceResolver(PathTable); var module = ModuleDefinition.CreateModuleDefinitionWithExplicitReferencesWithEmptyQualifierSpace( ModuleDescriptor.CreateForTesting("Test"), m_fakeMainFile, m_fakeModuleConfigFile, new[] { m_fakeMainFile, projectDir }, PathTable); Failure[] failures; var result = referenceResolver.TryUpdateAllInternalModuleReferences(sourceFile, module, out failures); XAssert.IsTrue(result); XAssert.IsTrue(sourceFile.ResolvedModules.ContainsKey(internalReference)); }