Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,5 @@ group :development do
gem "ruby-lsp"
gem "benchmark-ips"
end

gem "refract", github: "yippee-fun/refract"
15 changes: 14 additions & 1 deletion lib/phlex/compiler.rb
Original file line number Diff line number Diff line change
@@ -1,15 +1,28 @@
# frozen_string_literal: true

require "prism"
require "refract"

module Phlex::Compiler
Error = Class.new(StandardError)

class BufferPush

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this a vestige of a previous attempt?

def initialize(value, escape:)
@value = value
@escape = escape
freeze
end

attr_reader :value, :escape
end

def self.compile(component)
path, line = Object.const_source_location(component.name)
return unless File.exist?(path)
source = File.read(path)
tree = Prism.parse(source).value
Compilation.new(component, path, line, source, tree).compile
refract = Refract::Converter.new.visit(tree)

Compilation.new(component, path, line, source, refract).compile
end
end
16 changes: 8 additions & 8 deletions lib/phlex/compiler/class_compiler.rb
Original file line number Diff line number Diff line change
@@ -1,35 +1,35 @@
# frozen_string_literal: true

class Phlex::Compiler::ClassCompiler < Prism::Visitor
class Phlex::Compiler::ClassCompiler < Refract::Visitor
def initialize(compiler)
super()
@compiler = compiler
end

def compile(node)
visit_all(node.child_nodes)
visit(node.body)
end

def visit_def_node(node)
visit Refract::DefNode do |node|
return if node.name == :initialize
return if node.receiver

compiled_source = Phlex::Compiler::MethodCompiler.new(@compiler.component).compile(node)

if compiled_source
# puts compiled_source
@compiler.redefine_method(compiled_source, node.location.start_line)
@compiler.redefine_method(compiled_source, node.start_line)
end
end

def visit_class_node(node)
visit Refract::ClassNode do |node|
nil
end

def visit_module_node(node)
visit Refract::ModuleNode do |node|
nil
end

def visit_block_node(node)
visit Refract::BlockNode do |node|
nil
end
end
11 changes: 6 additions & 5 deletions lib/phlex/compiler/file_compiler.rb
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
# frozen_string_literal: true

class Phlex::Compiler::FileCompiler < Prism::Visitor
class Phlex::Compiler::FileCompiler < Refract::Visitor
def initialize(compiler)
super()
@compiler = compiler
end

def compile(node)
visit(node)
end

def visit_class_node(node)
if @compiler.line == node.location.start_line
visit Refract::ClassNode do |node|
if @compiler.line == node.start_line
Phlex::Compiler::ClassCompiler.new(@compiler).compile(node)
end
end
Expand All @@ -19,11 +20,11 @@ def visit_class_node(node)
# super
# end

def visit_def_node(node)
visit Refract::DefNode do |node|
nil
end

def visit_block_node(node)
visit Refract::BlockNode do |node|
nil
end
end
126 changes: 0 additions & 126 deletions lib/phlex/compiler/formatter.rb

This file was deleted.

Loading
Loading