Sha256: 4f6f884cd09772fab7966afcc6e7d5952b88b45e7dae338f374aa44b30aa4866

Contents?: true

Size: 1.3 KB

Versions: 4

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

class Phlex::Compiler
	class Optimizer
		def initialize(node, compiler:)
			@node = node
			@compiler = compiler
		end

		def call
			return optimize_element if optimize_element?

			false
		end

		private

		def optimize_element
			case @node
			in Nodes::VCall
				@node.node.extend(Phlex::Compiler::Elements::VCall)
			in Nodes::FCall
				@node.node.extend(Phlex::Compiler::Elements::FCall)
			in Nodes::Command
				@node.node.extend(Phlex::Compiler::Elements::Command)
			in Nodes::MethodAddBlock
				optimize_add_method_block_element
			end

			true
		end

		def optimize_add_method_block_element
			visitor = Phlex::Compiler::Visitors::Statements.new(@compiler)
			visitor.visit(@node.content)

			if visitor.mutating?
				@node.node.extend(Phlex::Compiler::Elements::MutatingMethodAddBlock)
			else
				@node.node.extend(Phlex::Compiler::Elements::MethodAddBlock)
			end

			Phlex::Compiler::Visitors::ViewMethod.new(@compiler).visit(@node.content)
		end

		def optimize_element?
			element? && !redefined?
		end

		def element?
			standard_element? || void_element?
		end

		def redefined?
			@compiler.redefined?(@node.name)
		end

		def standard_element?
			Phlex::HTML::STANDARD_ELEMENTS.key?(@node.name)
		end

		def void_element?
			Phlex::HTML::VOID_ELEMENTS.key?(@node.name)
		end
	end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
phlex-0.5.3 lib/phlex/compiler/optimizer.rb
phlex-0.5.2 lib/phlex/compiler/optimizer.rb
phlex-0.5.1 lib/phlex/compiler/optimizer.rb
phlex-0.5.0 lib/phlex/compiler/optimizer.rb