gloss 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "optparse"
4
+
5
+ module Gloss
6
+ class CLI
7
+ def initialize(argv)
8
+ @argv = argv
9
+ end
10
+
11
+ def run
12
+ # TODO: allow destructuring: command, *files = @argv
13
+ command = @argv.first
14
+ files = @argv[1..-1]
15
+ case command
16
+ when "watch"
17
+ Watcher.new.watch
18
+ when "build"
19
+ (files.empty? ? Dir.glob("#{Config.src_dir}/**/*.gl") : files).each do |fp|
20
+ puts "=====> Building #{fp}"
21
+ content = File.read(fp)
22
+ tree_hash = Parser.new(content).run
23
+ type_checker = TypeChecker.new
24
+ rb_output = Builder.new(tree_hash, type_checker).run
25
+ type_checker.run(rb_output)
26
+
27
+ puts "=====> Writing #{fp}"
28
+ Writer.new(rb_output, fp).run
29
+ end
30
+ when "init"
31
+ force = false
32
+ OptionParser.new do |opt|
33
+ opt.on("--force", "-f") { force = true }
34
+ end.parse(@argv)
35
+ Initializer.new(force).run
36
+ else
37
+ abort "Gloss doesn't know how to #{command}"
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gloss
4
+ class Scope < Hash[String, String]
5
+ def [](k)
6
+ fetch(k) { raise "Undefined expression for current scope: #{k}" }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Gloss
4
+ class Source < String
5
+ def initialize(@indent_level)
6
+ super()
7
+ end
8
+
9
+ def write(*args : String)
10
+ args.each do |a|
11
+ self << a
12
+ end
13
+ self
14
+ end
15
+
16
+ def write_indnt(*args : String)
17
+ write(*args.map { |a| "#{(" " * @indent_level)}#{a}" })
18
+ end
19
+
20
+ def write_ln(*args : String)
21
+ write_indnt(*args.map { |a| a.strip << "\n" })
22
+ end
23
+
24
+ def increment_indent
25
+ @indent_level += 1
26
+ end
27
+
28
+ def decrement_indent
29
+ @indent_level -= 1
30
+ end
31
+ end
32
+ end
@@ -29,7 +29,10 @@ module Gloss
29
29
  when Steep::Errors::MethodBodyTypeMismatch
30
30
  "Invalid method body type - expected: #{e.expected}, actual: #{e.actual}"
31
31
  when Steep::Errors::IncompatibleArguments
32
- "Invalid argmuents - method type: #{e.method_type}, receiver type: #{e.receiver_type}"
32
+ <<-ERR
33
+ Invalid argmuents - method type: #{e.method_type}
34
+ method name: #{e.method_type.method_decls.first.method_name}
35
+ ERR
33
36
  when Steep::Errors::ReturnTypeMismatch
34
37
  "Invalid return type - expected: #{e.expected}, actual: #{e.actual}"
35
38
  when Steep::Errors::IncompatibleAssignment
@@ -1,3 +1,3 @@
1
1
  module Gloss
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -7,7 +7,7 @@ module Gloss
7
7
  module Utils
8
8
  module_function
9
9
 
10
- def src_path_to_output_path(src_path)
10
+ def src_path_to_output_path(src_path : String) : String
11
11
  src_path.sub(%r{\A(?:\./)?#{Config.src_dir}/?}, "")
12
12
  .sub(/\.gl$/, ".rb")
13
13
  end
@@ -18,8 +18,8 @@ module Gloss
18
18
 
19
19
  def initialize(
20
20
  @content,
21
- src_path : String?,
22
- @output_path : Pathname = Pathname.new(src_path_to_output_path(src_path))
21
+ src_path : String,
22
+ @output_path : Pathname? = Pathname.new(src_path_to_output_path(src_path))
23
23
  )
24
24
  end
25
25
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gloss
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - johansenja
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-01-20 00:00:00.000000000 Z
11
+ date: 2021-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fast_blank
@@ -145,13 +145,14 @@ files:
145
145
  - exe/gloss
146
146
  - ext/gloss/Makefile
147
147
  - ext/gloss/extconf.rb
148
+ - ext/gloss/lib/cr_ruby.cr
149
+ - ext/gloss/lib/rbs_types.cr
148
150
  - ext/gloss/shard.yml
149
151
  - ext/gloss/spec/parser_spec.cr
150
152
  - ext/gloss/spec/spec_helper.cr
151
153
  - ext/gloss/src/cr_ast.cr
152
154
  - ext/gloss/src/gloss.cr
153
155
  - ext/gloss/src/lexer.cr
154
- - ext/gloss/src/lib/cr_ruby.cr
155
156
  - ext/gloss/src/parser.cr
156
157
  - ext/gloss/src/rb_ast.cr
157
158
  - gloss.gemspec
@@ -170,10 +171,14 @@ files:
170
171
  - lib/gloss/writer.rb
171
172
  - sig/gloss.rbs
172
173
  - sig/listen.rbs
174
+ - src/lib/gloss/builder.gl
175
+ - src/lib/gloss/cli.gl
173
176
  - src/lib/gloss/config.gl
174
177
  - src/lib/gloss/errors.gl
175
178
  - src/lib/gloss/initializer.gl
176
179
  - src/lib/gloss/parser.gl
180
+ - src/lib/gloss/scope.gl
181
+ - src/lib/gloss/source.gl
177
182
  - src/lib/gloss/type_checker.gl
178
183
  - src/lib/gloss/version.gl
179
184
  - src/lib/gloss/watcher.gl