示例#1
0
        private static FunctionDeclaration CreateWithQualifierFunction(IIdentifier namespaceName, int pos, ISourceFile sourceFile)
        {
            // Observe the body is null, this is a 'declare' function
            var withQualifier = CreateInjectedNode <FunctionDeclaration>(SyntaxKind.FunctionDeclaration, pos, sourceFile);

            withQualifier.Name      = CreateIdentifier(Names.WithQualifierFunction, pos, sourceFile);
            withQualifier.Flags    |= NodeFlags.Ambient | NodeFlags.Export | NodeFlags.ScriptPublic;
            withQualifier.Modifiers = ModifiersArray.Create(withQualifier.Flags);
            withQualifier.Modifiers.Add(CreateInjectedNode <Modifier>(SyntaxKind.ExportKeyword, pos, sourceFile));
            withQualifier.Modifiers.Add(CreateInjectedNode <Modifier>(SyntaxKind.DeclareKeyword, pos, sourceFile));
            withQualifier.Parameters = CreateWithQualifierParameters(pos, sourceFile);
            withQualifier.Type       = CreateTypeOfExpression(namespaceName.Text, pos, sourceFile);
            withQualifier.Decorators = new NodeArray <IDecorator>(CreatePublicDecorator(pos, sourceFile));

            return(withQualifier);
        }
示例#2
0
        /// <summary>
        /// Injects a default qualifier declaration as a top level statement
        /// </summary>
        /// <remarks>
        /// The created function has the following shape:
        ///
        /// export declare const qualifier : {};
        ///
        /// The identifier count and node count that the parser mantains is not updated! But nobody is consuming that information so far.
        /// The declaration is created at position 0. This should not be visible to the user though.
        /// </remarks>
        public static void AddDefaultQualifierDeclaration(this ISourceFile sourceFile)
        {
            var variableStatement = CreateInjectedNode <VariableStatement>(SyntaxKind.VariableStatement, 0, sourceFile);

            // Flags and modifiers for the statement are set to 'export declare'
            variableStatement.Flags    |= NodeFlags.Ambient | NodeFlags.Export;
            variableStatement.Modifiers = ModifiersArray.Create(variableStatement.Flags);
            variableStatement.Modifiers.Add(CreateInjectedNode <Modifier>(SyntaxKind.ExportKeyword, 0, sourceFile));
            variableStatement.Modifiers.Add(CreateInjectedNode <Modifier>(SyntaxKind.DeclareKeyword, 0, sourceFile));

            variableStatement.DeclarationList = CreateQualifierDeclaration(0, sourceFile);

            sourceFile.Statements.Insert(0, variableStatement);

            sourceFile.DeclaresRootQualifier = true;
        }
示例#3
0
        /// <inheritdoc/>
        protected override ITypeAliasDeclaration ParseTypeAliasDeclaration(int fullStart, int triviaLength, NodeArray <IDecorator> decorators, ModifiersArray modifiers)
        {
            var originalDecorators   = RemovePositionDecorator(decorators);
            var typeAliasDeclaration = base.ParseTypeAliasDeclaration(fullStart, triviaLength, originalDecorators, modifiers);

            UpdateDeclarationtWithOriginalPosition(decorators, typeAliasDeclaration);

            return(typeAliasDeclaration);
        }
示例#4
0
        /// <inheritdoc/>
        protected override IExportDeclaration ParseExportDeclaration(int fullStart, int triviaLength, NodeArray <IDecorator> decorators, ModifiersArray modifiers)
        {
            var originalDecorators = RemovePositionDecorator(decorators);

            var exportDeclaration = base.ParseExportDeclaration(fullStart, triviaLength, originalDecorators, modifiers);

            Contract.Assert(exportDeclaration.ExportClause == null || exportDeclaration.ExportClause.Elements.Count == 1, "A public surface file should only have one export specifier per declaration");

            if (exportDeclaration.ExportClause == null)
            {
                UpdateDeclarationtWithOriginalPosition(decorators, exportDeclaration);
            }
            else
            {
                var exportSpecifier = exportDeclaration.ExportClause.Elements[0];
                UpdateDeclarationtWithOriginalPosition(decorators, exportSpecifier);
            }

            return(exportDeclaration);
        }
示例#5
0
        /// <inheritdoc/>
        protected override IModuleDeclaration ParseModuleDeclaration(int fullStart, int triviaLength, NodeArray <IDecorator> decorators, ModifiersArray modifiers)
        {
            var originalDecorators = RemovePositionDecorator(decorators);
            var moduleDeclaration  = base.ParseModuleDeclaration(fullStart, triviaLength, originalDecorators, modifiers);

            Contract.Assert(moduleDeclaration.Body.AsModuleDeclaration() == null, "A public surface file should only have one module per declaration");

            UpdateDeclarationtWithOriginalPosition(decorators, moduleDeclaration);

            return(moduleDeclaration);
        }
示例#6
0
        /// <inheritdoc/>
        protected override IVariableStatement ParseVariableStatement(int fullStart, int triviaLength, NodeArray <IDecorator> decorators, ModifiersArray modifiers)
        {
            var originalDecorators = RemovePositionDecorator(decorators);
            var variableStatement  = base.ParseVariableStatement(fullStart, triviaLength, originalDecorators, modifiers);

            Contract.Assert(variableStatement.DeclarationList.Declarations.Count == 1, "A public surface file should only have one declaration per statement");

            var declaration = variableStatement.DeclarationList.Declarations[0];

            UpdateDeclarationtWithOriginalPosition(decorators, declaration);

            return(variableStatement);
        }