static VariableDeclarationSyntax DeclareVariable(this IVariableDeclarationModel decl, RoslynTranslator translator,
                                                         bool useInitialization, bool isField)
        {
            bool canBeImplicitlyTyped = !isField;
            bool initialized          = false;

            var varDeclarator = SyntaxFactory.VariableDeclarator(SyntaxFactory.Identifier(decl.VariableName));

            if (useInitialization && translator.Stencil.RequiresInitialization(decl))
            {
                if (decl.InitializationModel != null)
                {
                    var expression = translator.BuildNode(decl.InitializationModel).SingleOrDefault() as ExpressionSyntax;
                    varDeclarator = varDeclarator.WithInitializer(SyntaxFactory.EqualsValueClause(expression));
                    initialized   = true;
                }
            }

            VariableDeclarationSyntax varDeclaration;

            if (canBeImplicitlyTyped && initialized)
            {
                varDeclaration = SyntaxFactory.VariableDeclaration(SyntaxFactory.IdentifierName("var"));
            }
            else
            {
                varDeclaration = SyntaxFactory.VariableDeclaration(decl.DataType.ToTypeSyntax(translator.Stencil));
            }

            return(varDeclaration.WithVariables(SyntaxFactory.SingletonSeparatedList(varDeclarator)));
        }