Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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"));
        }
Beispiel #4
0
        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());
                }
            }
        }
Beispiel #5
0
        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());
            }
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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));
        }