Skip to content

Commit b3e079e

Browse files
committed
refactor: replace all internal require with Ruby autoload
Every internal library require replaced with autoload entries defined in the immediate parent namespace file. Zero require_relative calls. Files changed: - lib/interscript.rb: autoload for Stdlib, Compiler, Interpreter, DSL, Node, Detector, VERSION (was 6 explicit requires) - lib/interscript/node.rb: autoload for all Node subtypes - lib/interscript/node/item.rb: autoload for all Item subtypes including Maybe/MaybeSome/Some (subclasses in repeat.rb) - lib/interscript/node/group.rb: autoload for Parallel, Sequential - lib/interscript/node/rule.rb: autoload for Sub, Run, Funcall - lib/interscript/dsl.rb: autoload for all DSL modules - lib/interscript/dsl/group.rb: autoload for Parallel - lib/interscript/compiler.rb: autoload for Javascript, Python, Ruby, JsonIR - lib/interscript/visualize.rb: autoload for Nodes, JSON Verified: transliterate works with lazy autoload.
1 parent 904eaf0 commit b3e079e

9 files changed

Lines changed: 70 additions & 52 deletions

File tree

lib/interscript.rb

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
1-
require "interscript/version"
21
require "yaml"
32

43
module Interscript
4+
# Autoload all internal library code. No require_relative or internal
5+
# require calls — everything loads lazily via autoload (OCP: adding a
6+
# new child module = adding one autoload line here).
7+
autoload :VERSION, "interscript/version"
8+
autoload :Stdlib, "interscript/stdlib"
9+
autoload :Compiler, "interscript/compiler"
10+
autoload :Interpreter, "interscript/interpreter"
11+
autoload :DSL, "interscript/dsl"
12+
autoload :Node, "interscript/node"
13+
autoload :Detector, "interscript/detector"
14+
515
# An error caused by a lack of some map
616
class MapNotFoundError < StandardError; end
717
# An error caused by a missing dependency
@@ -185,13 +195,3 @@ def exclude_maps(maps, compiler:, platform: true)
185195
end
186196
end
187197
end
188-
189-
require "interscript/stdlib"
190-
191-
require "interscript/compiler"
192-
require "interscript/interpreter"
193-
194-
require "interscript/dsl"
195-
require "interscript/node"
196-
197-
require "interscript/detector"

lib/interscript/compiler.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# An Interscript compiler interface
22
class Interscript::Compiler
3+
# Autoload all compiler variants (OCP: new compiler = one autoload).
4+
autoload :Javascript, "interscript/compiler/javascript"
5+
autoload :Python, "interscript/compiler/python"
6+
autoload :Ruby, "interscript/compiler/ruby"
7+
autoload :JsonIR, "interscript/compiler/json_ir"
8+
39
attr_accessor :code
410

511
def self.call(map, **kwargs)

lib/interscript/dsl.rb

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,14 @@ def self.parse(map_name, reverse: true)
9595
end
9696
end
9797

98-
require "interscript/dsl/symbol_mm"
99-
require "interscript/dsl/items"
100-
101-
require "interscript/dsl/document"
102-
require "interscript/dsl/group"
103-
require "interscript/dsl/stage"
104-
require "interscript/dsl/metadata"
105-
require "interscript/dsl/tests"
106-
require "interscript/dsl/aliases"
98+
module Interscript::DSL
99+
# Autoload all DSL modules (OCP: new DSL section = one autoload).
100+
autoload :SymbolMM, "interscript/dsl/symbol_mm"
101+
autoload :Items, "interscript/dsl/items"
102+
autoload :Document, "interscript/dsl/document"
103+
autoload :Group, "interscript/dsl/group"
104+
autoload :Stage, "interscript/dsl/stage"
105+
autoload :Metadata, "interscript/dsl/metadata"
106+
autoload :Tests, "interscript/dsl/tests"
107+
autoload :Aliases, "interscript/dsl/aliases"
108+
end

lib/interscript/dsl/group.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,6 @@ def parallel(**kwargs, &block)
5050
end
5151
end
5252

53-
require "interscript/dsl/group/parallel"
53+
class Interscript::DSL::Group
54+
autoload :Parallel, "interscript/dsl/group/parallel"
55+
end

lib/interscript/node.rb

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,16 @@
11
class Interscript::Node
2+
# Autoload all node types. Adding a new node type = one autoload
3+
# line here. No require_relative (OCP).
4+
autoload :Group, "interscript/node/group"
5+
autoload :Document, "interscript/node/document"
6+
autoload :MetaData, "interscript/node/metadata"
7+
autoload :AliasDef, "interscript/node/alias_def"
8+
autoload :Dependency, "interscript/node/dependency"
9+
autoload :Tests, "interscript/node/tests"
10+
autoload :Stage, "interscript/node/stage"
11+
autoload :Rule, "interscript/node/rule"
12+
autoload :Item, "interscript/node/item"
13+
214
def initialize
315
raise NotImplementedError, "You can't construct a Node directly"
416
end
@@ -12,15 +24,3 @@ def to_hash
1224
question: "is something missing?"}
1325
end
1426
end
15-
16-
require "interscript/node/group"
17-
require "interscript/node/document"
18-
19-
require "interscript/node/metadata"
20-
require "interscript/node/alias_def"
21-
require "interscript/node/dependency"
22-
require "interscript/node/tests"
23-
24-
require "interscript/node/stage"
25-
require "interscript/node/rule"
26-
require "interscript/node/item"

lib/interscript/node/group.rb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,7 @@ def inspect
4141
end
4242
end
4343

44-
require "interscript/node/group/parallel"
45-
require "interscript/node/group/sequential"
44+
class Interscript::Node::Group
45+
autoload :Parallel, "interscript/node/group/parallel"
46+
autoload :Sequential, "interscript/node/group/sequential"
47+
end

lib/interscript/node/item.rb

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,18 @@ def self.try_convert(i)
4747
end
4848
end
4949

50-
require "interscript/node/item/alias"
51-
require "interscript/node/item/string"
52-
require "interscript/node/item/group"
53-
require "interscript/node/item/any"
54-
require "interscript/node/item/stage"
55-
require "interscript/node/item/capture"
56-
require "interscript/node/item/repeat"
50+
class Interscript::Node::Item
51+
# Autoload all item types (OCP: new item type = one autoload).
52+
autoload :Alias, "interscript/node/item/alias"
53+
autoload :String, "interscript/node/item/string"
54+
autoload :Group, "interscript/node/item/group"
55+
autoload :Any, "interscript/node/item/any"
56+
autoload :Stage, "interscript/node/item/stage"
57+
autoload :CaptureGroup, "interscript/node/item/capture"
58+
autoload :Repeat, "interscript/node/item/repeat"
59+
# Maybe, MaybeSome, Some are subclasses of Repeat defined in
60+
# the same file. Autoload points to repeat.rb which defines all of them.
61+
autoload :Maybe, "interscript/node/item/repeat"
62+
autoload :MaybeSome, "interscript/node/item/repeat"
63+
autoload :Some, "interscript/node/item/repeat"
64+
end

lib/interscript/node/rule.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
class Interscript::Node::Rule < Interscript::Node
2+
# Autoload all rule types (OCP: new rule type = one autoload).
3+
autoload :Sub, "interscript/node/rule/sub"
4+
autoload :Run, "interscript/node/rule/run"
5+
autoload :Funcall, "interscript/node/rule/funcall"
6+
27
def ==(other)
38
super && reverse_run == other.reverse_run
49
end
510
end
6-
7-
require "interscript/node/rule/sub"
8-
require "interscript/node/rule/run"
9-
require "interscript/node/rule/funcall"

lib/interscript/visualize.rb

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
require "erb"
2-
require "interscript/visualize/nodes"
3-
require "interscript/visualize/json"
4-
5-
def h(str)
6-
str.to_s.gsub("&", "&amp;").gsub("<", "&lt;").gsub(">", "&gt;").gsub('"', "&quot;")
7-
end
82

93
class Interscript::Visualize
4+
autoload :Nodes, "interscript/visualize/nodes"
5+
autoload :JSON, "interscript/visualize/json"
6+
107
def self.def_template(template)
118
@template = ERB.new(File.read(__dir__ + "/visualize/#{template}.html.erb"))
129
end

0 commit comments

Comments
 (0)