gloss 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/tests.yml +41 -0
- data/.gloss.yml +1 -0
- data/Gemfile.lock +9 -9
- data/README.md +5 -6
- data/Rakefile +4 -2
- data/ext/gloss/Makefile +6 -10
- data/gloss.gemspec +3 -3
- data/lib/gloss/config.rb +12 -8
- data/lib/gloss/logger.rb +5 -0
- data/lib/gloss/prog_loader.rb +17 -14
- data/lib/gloss/type_checker.rb +16 -6
- data/lib/gloss/utils.rb +5 -11
- data/lib/gloss/version.rb +4 -4
- data/lib/gloss/visitor.rb +11 -3
- data/lib/gloss/watcher.rb +12 -5
- data/logo.svg +6 -0
- data/src/lib/gloss/config.gl +12 -7
- data/src/lib/gloss/logger.gl +3 -1
- data/src/lib/gloss/prog_loader.gl +17 -12
- data/src/lib/gloss/type_checker.gl +17 -6
- data/src/lib/gloss/utils.gl +2 -5
- data/src/lib/gloss/version.gl +1 -1
- data/src/lib/gloss/visitor.gl +12 -4
- data/src/lib/gloss/watcher.gl +10 -4
- metadata +15 -16
- data/.github/workflows/crystal_specs.yml +0 -26
- data/.github/workflows/ruby_specs.yml +0 -33
- data/.github/workflows/self_build.yml +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0cb01614c6e4395edaf5600dd39e958b2ca86ae6c2650c2028519659c813ff64
|
4
|
+
data.tar.gz: a1ee0171851a7463113c4e12dff9dd81bb2c003e080896171060dfc439a18499
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 781f7dc53f12231f843947aa619521fbd99deca1bf15a7a5263a279e7a030683c4da2d72722beb30d4a35beba8e98e86085eabd3046d1567be1c37c7d577c6d7
|
7
|
+
data.tar.gz: b3a63fbcb5c81a8c0d4336dcfdb64d46a2ebf624fd804942ba8243c04b43fab05a881ba6386e6f6a5c7fb76b416ca8677212e7993ea8ea22cdca981bff2645fd
|
@@ -0,0 +1,41 @@
|
|
1
|
+
name: Tests
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
env:
|
9
|
+
ImageOS: ubuntu18
|
10
|
+
jobs:
|
11
|
+
build:
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
container:
|
14
|
+
image: johansenja/gloss:latest
|
15
|
+
steps:
|
16
|
+
- name: Checkout
|
17
|
+
uses: actions/checkout@v2
|
18
|
+
- uses: actions/cache@v2
|
19
|
+
id: gems-cache
|
20
|
+
with:
|
21
|
+
path: vendor/bundle
|
22
|
+
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
23
|
+
restore-keys: |
|
24
|
+
${{ runner.os }}-gems-
|
25
|
+
- name: install Bundler
|
26
|
+
run: gem install bundler:2.2.3
|
27
|
+
- name: install gems
|
28
|
+
run: bundle install --jobs 4 --retry 3
|
29
|
+
- name: Compile extension
|
30
|
+
run: make
|
31
|
+
working-directory: ext/gloss
|
32
|
+
- name: Run tests
|
33
|
+
run: rake
|
34
|
+
- name: Install dependencies
|
35
|
+
run: shards install
|
36
|
+
working-directory: ext/gloss
|
37
|
+
- name: Run tests
|
38
|
+
run: crystal spec
|
39
|
+
working-directory: ext/gloss
|
40
|
+
- name: Build self with current state
|
41
|
+
run: exe/gloss build
|
data/.gloss.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
gloss (0.1.
|
4
|
+
gloss (0.1.4)
|
5
5
|
fast_blank
|
6
6
|
listen
|
7
|
-
rbs
|
8
|
-
steep
|
7
|
+
rbs (~> 1.0.4)
|
8
|
+
steep (~> 0.41.0)
|
9
9
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
12
12
|
specs:
|
13
|
-
activesupport (6.1.
|
13
|
+
activesupport (6.1.3)
|
14
14
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
15
15
|
i18n (>= 1.6, < 2)
|
16
16
|
minitest (>= 5.1)
|
17
17
|
tzinfo (~> 2.0)
|
18
18
|
zeitwerk (~> 2.3)
|
19
|
-
ast (2.4.
|
19
|
+
ast (2.4.2)
|
20
20
|
ast_utils (0.4.0)
|
21
21
|
parser (>= 2.7.0)
|
22
22
|
byebug (11.1.3)
|
@@ -24,15 +24,15 @@ GEM
|
|
24
24
|
concurrent-ruby (1.1.8)
|
25
25
|
diff-lcs (1.4.4)
|
26
26
|
fast_blank (1.0.0)
|
27
|
-
ffi (1.
|
28
|
-
i18n (1.8.
|
27
|
+
ffi (1.15.0)
|
28
|
+
i18n (1.8.9)
|
29
29
|
concurrent-ruby (~> 1.0)
|
30
30
|
language_server-protocol (3.15.0.1)
|
31
31
|
listen (3.4.1)
|
32
32
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
33
33
|
rb-inotify (~> 0.9, >= 0.9.10)
|
34
34
|
method_source (1.0.0)
|
35
|
-
minitest (5.14.
|
35
|
+
minitest (5.14.4)
|
36
36
|
parallel (1.20.1)
|
37
37
|
parser (2.7.2.0)
|
38
38
|
ast (~> 2.4.1)
|
@@ -49,7 +49,7 @@ GEM
|
|
49
49
|
rb-fsevent (0.10.4)
|
50
50
|
rb-inotify (0.10.1)
|
51
51
|
ffi (~> 1.0)
|
52
|
-
rbs (1.0.
|
52
|
+
rbs (1.0.6)
|
53
53
|
regexp_parser (2.0.3)
|
54
54
|
rexml (3.2.4)
|
55
55
|
rspec (3.10.0)
|
data/README.md
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
# Gloss
|
1
|
+
# 
|
2
2
|
[](https://rubygems.org/gems/gloss)
|
3
|
-
[&total_label=)](https://rubygems.org/gems/gloss)
|
3
|
+
[](https://github.com/johansenja/gloss/actions?query=workflow%3ATests)
|
4
|
+
[&total_label=)](https://rubygems.org/gems/gloss)
|
6
5
|
[&metric=true)](https://rubygems.org/gems/gloss)
|
7
6
|
|
8
7
|
[Gloss](https://en.wikipedia.org/wiki/Gloss_(annotation)) is a high-level programming language based on [Ruby](https://github.com/ruby/ruby) and [Crystal](https://github.com/crystal-lang/crystal), which compiles to ruby; its aims are on transparency,
|
@@ -136,7 +135,7 @@ class Language
|
|
136
135
|
TS = "TypeScript"
|
137
136
|
P = "Python"
|
138
137
|
end
|
139
|
-
|
138
|
+
|
140
139
|
def favourite_language(language : Lang)
|
141
140
|
puts "my favourite language is #{language}"
|
142
141
|
end
|
@@ -212,7 +211,7 @@ end
|
|
212
211
|
```crystal
|
213
212
|
abstract class BaseClass
|
214
213
|
attr_reader :var
|
215
|
-
|
214
|
+
|
216
215
|
def initialize(@var); end
|
217
216
|
end
|
218
217
|
|
data/Rakefile
CHANGED
@@ -17,8 +17,10 @@ RSpec::Core::RakeTask.new :spec do |spec|
|
|
17
17
|
spec.pattern = 'spec/**/*_spec.rb'
|
18
18
|
end
|
19
19
|
|
20
|
-
task :
|
20
|
+
task :build_gem do
|
21
21
|
sh "cd", "ext/gloss", "&&", "make", "all", "&&", "cd", "-"
|
22
22
|
end
|
23
23
|
|
24
|
-
task :
|
24
|
+
task build: [:build_gem]
|
25
|
+
|
26
|
+
task default: [:spec]
|
data/ext/gloss/Makefile
CHANGED
@@ -3,16 +3,8 @@ PLATFORM = $(shell uname -s)
|
|
3
3
|
|
4
4
|
ifeq "$(PLATFORM)" "Darwin"
|
5
5
|
TARGET = ../../lib/gls.bundle
|
6
|
-
|
7
|
-
clean:
|
8
|
-
rm -f $(TARGET) $(TARGET).dwarf
|
9
|
-
endif
|
10
|
-
|
11
|
-
ifeq "$(PLATFORM)" "Linux"
|
6
|
+
else
|
12
7
|
TARGET = ../../lib/gls.so
|
13
|
-
|
14
|
-
clean:
|
15
|
-
rm -f $(TARGET)
|
16
8
|
endif
|
17
9
|
|
18
10
|
install: all
|
@@ -23,4 +15,8 @@ shards:
|
|
23
15
|
shards
|
24
16
|
|
25
17
|
build: ./src/gloss.cr
|
26
|
-
$(CRYSTAL) build --link-flags "-shared -
|
18
|
+
$(CRYSTAL) build --link-flags "-shared -Wl,-undefined,dynamic_lookup" $< -o $(TARGET) --release
|
19
|
+
|
20
|
+
clean:
|
21
|
+
rm -f $(TARGET)
|
22
|
+
rm -f $(TARGET).dwarf
|
data/gloss.gemspec
CHANGED
@@ -17,11 +17,11 @@ Gem::Specification.new do |s|
|
|
17
17
|
|
18
18
|
s.add_runtime_dependency "fast_blank"
|
19
19
|
s.add_runtime_dependency "listen"
|
20
|
-
s.add_runtime_dependency "rbs"
|
21
|
-
s.add_runtime_dependency "steep"
|
20
|
+
s.add_runtime_dependency "rbs", "~>1.0.4"
|
21
|
+
s.add_runtime_dependency "steep", "~>0.41.0"
|
22
22
|
|
23
|
+
s.add_development_dependency "pry-byebug"
|
23
24
|
s.add_development_dependency "rake-compiler"
|
24
25
|
s.add_development_dependency "rspec"
|
25
|
-
s.add_development_dependency "pry-byebug"
|
26
26
|
s.add_development_dependency "rubocop"
|
27
27
|
end
|
data/lib/gloss/config.rb
CHANGED
@@ -10,14 +10,18 @@ module Gloss
|
|
10
10
|
Config = OpenStruct.new(default_config: {:frozen_string_literals => true,
|
11
11
|
:src_dir => "src",
|
12
12
|
:entrypoint => nil,
|
13
|
-
:strict_require => false
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
:strict_require => false,
|
14
|
+
:type_checking_strictness => "strict"}.freeze)
|
15
|
+
def self.load_config()
|
16
|
+
user_config = (if File.exist?(File.absolute_path(File.join(Dir.pwd, CONFIG_PATH)))
|
17
|
+
YAML.safe_load(File.read(CONFIG_PATH))
|
18
|
+
else
|
19
|
+
Config.default_config
|
20
|
+
end)
|
17
21
|
Config.default_config
|
18
|
-
end)
|
19
|
-
Config.default_config
|
20
22
|
.each() { |k, v|
|
21
|
-
|
22
|
-
|
23
|
+
Config.send(:"#{k}=", user_config.[](k.to_s) || v)
|
24
|
+
}
|
25
|
+
end
|
26
|
+
load_config
|
23
27
|
end
|
data/lib/gloss/logger.rb
CHANGED
data/lib/gloss/prog_loader.rb
CHANGED
@@ -7,6 +7,7 @@ require "rubygems/gem_runner"
|
|
7
7
|
module Gloss
|
8
8
|
OUTPUT_BY_PATH = Hash.new
|
9
9
|
class ProgLoader
|
10
|
+
attr_reader(:"type_checker")
|
10
11
|
def initialize()
|
11
12
|
entrypoint = Config.entrypoint
|
12
13
|
(if entrypoint.==(nil) || entrypoint.==("")
|
@@ -26,12 +27,14 @@ module Gloss
|
|
26
27
|
.read
|
27
28
|
contents_tree = Parser.new(file_contents)
|
28
29
|
.run
|
29
|
-
on_new_file_referenced = proc() { |
|
30
|
-
(
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
on_new_file_referenced = proc() { |ps, relative|
|
31
|
+
ps.each() { |pa|
|
32
|
+
(if relative
|
33
|
+
handle_require_relative(pa, path_string)
|
34
|
+
else
|
35
|
+
handle_require(pa)
|
36
|
+
end)
|
37
|
+
}
|
35
38
|
}
|
36
39
|
OUTPUT_BY_PATH.[]=(path_string, Visitor.new(contents_tree, @type_checker, on_new_file_referenced)
|
37
40
|
.run)
|
@@ -60,7 +63,7 @@ return
|
|
60
63
|
pathn = Pathname.new("#{File.join(Dir.pwd, "sig", path)}.rbs")
|
61
64
|
gem_path = Utils.gem_path_for(path)
|
62
65
|
(if gem_path
|
63
|
-
sig_files = Dir.glob(File.absolute_path(File.join(gem_path, "..", "
|
66
|
+
sig_files = Dir.glob(File.absolute_path(File.join(gem_path, "..", "sig", "**", "*.rbs")))
|
64
67
|
(if sig_files.length
|
65
68
|
.positive?
|
66
69
|
sig_files.each() { |fp|
|
@@ -81,7 +84,7 @@ return
|
|
81
84
|
@type_checker.load_sig_path(pathn.to_s)
|
82
85
|
@processed_files.add(pathn.to_s)
|
83
86
|
else
|
84
|
-
rbs_stdlib_dir = File.absolute_path(File.join(@type_checker.rbs_gem_dir, "..", "
|
87
|
+
rbs_stdlib_dir = File.absolute_path(File.join(@type_checker.rbs_gem_dir, "..", "stdlib", path))
|
85
88
|
(if Pathname.new(rbs_stdlib_dir)
|
86
89
|
.exist?
|
87
90
|
load_rbs_from_require_path(path)
|
@@ -103,12 +106,12 @@ nil }
|
|
103
106
|
end)
|
104
107
|
end)
|
105
108
|
end
|
106
|
-
private def handle_require_relative(path)
|
107
|
-
base = File.join(
|
109
|
+
private def handle_require_relative(path, source_file)
|
110
|
+
base = File.join(source_file, "..", path)
|
108
111
|
# @type var pn: String?
|
109
112
|
pn = nil
|
110
|
-
Gem.suffixes
|
111
|
-
.each() { |ext|
|
113
|
+
exts = [".gl"].concat(Gem.suffixes)
|
114
|
+
exts.each() { |ext|
|
112
115
|
full = File.absolute_path(base.+(ext))
|
113
116
|
(if File.exist?(full)
|
114
117
|
pn = full
|
@@ -120,7 +123,7 @@ nil }
|
|
120
123
|
end
|
121
124
|
else
|
122
125
|
(if Config.strict_require
|
123
|
-
throw(:"error", "Cannot resolve
|
126
|
+
throw(:"error", "Cannot resolve relative path for #{path}")
|
124
127
|
else
|
125
128
|
Gloss.logger
|
126
129
|
.debug("No path found for #{path}")
|
@@ -128,7 +131,7 @@ nil }
|
|
128
131
|
end)
|
129
132
|
end
|
130
133
|
private def rbs_stdlib_path_for(libr)
|
131
|
-
File.absolute_path(File.join(@type_checker.rbs_gem_dir, "..", "
|
134
|
+
File.absolute_path(File.join(@type_checker.rbs_gem_dir, "..", "stdlib", libr))
|
132
135
|
end
|
133
136
|
private def load_rbs_from_require_path(path)
|
134
137
|
Dir.glob(File.join(rbs_stdlib_path_for(path), "**", "*.rbs"))
|
data/lib/gloss/type_checker.rb
CHANGED
@@ -6,13 +6,23 @@
|
|
6
6
|
require "set"
|
7
7
|
module Gloss
|
8
8
|
class TypeChecker
|
9
|
-
Project = Struct.new(:"targets")
|
10
9
|
attr_reader(:"steep_target", :"top_level_decls", :"env", :"rbs_gem_dir")
|
10
|
+
module Strictness
|
11
|
+
Strict = "strict"
|
12
|
+
Lenient = "lenient"
|
13
|
+
Default = "default"
|
14
|
+
end
|
11
15
|
def initialize()
|
12
|
-
|
13
|
-
.
|
14
|
-
|
15
|
-
|
16
|
+
options = Steep::Project::Options.new
|
17
|
+
case Config.type_checking_strictness
|
18
|
+
when Strictness::Strict
|
19
|
+
options.apply_strict_typing_options!
|
20
|
+
when Strictness::Lenient
|
21
|
+
options.apply_lenient_typing_options!
|
22
|
+
else
|
23
|
+
options.apply_default_typing_options!
|
24
|
+
end
|
25
|
+
@steep_target = Steep::Project::Target.new(name: "gloss", options: options, source_patterns: ["**/*.rb"], ignore_patterns: Array.new, signature_patterns: ["sig"])
|
16
26
|
@top_level_decls = Set.new
|
17
27
|
@rbs_gem_dir = Utils.gem_path_for("rbs")
|
18
28
|
env_loader = RBS::EnvironmentLoader.new
|
@@ -51,7 +61,7 @@ case e
|
|
51
61
|
when Steep::Diagnostic::Ruby::UnexpectedBlockGiven
|
52
62
|
"Unexpected block given"
|
53
63
|
else
|
54
|
-
"#{e.header_line}\n#{e
|
64
|
+
"#{e.header_line}\n#{e}"
|
55
65
|
end
|
56
66
|
}
|
57
67
|
.join("\n")
|
data/lib/gloss/utils.rb
CHANGED
@@ -21,17 +21,11 @@ module Gloss
|
|
21
21
|
end)
|
22
22
|
end
|
23
23
|
def gem_path_for(gem_name)
|
24
|
-
|
25
|
-
|
26
|
-
.
|
27
|
-
|
28
|
-
|
29
|
-
Gem.ui
|
30
|
-
.outs
|
31
|
-
.string
|
32
|
-
rescue SystemExit => e
|
33
|
-
nil
|
34
|
-
end
|
24
|
+
spec = Gem::Specification.find_by_path(gem_name)
|
25
|
+
(if spec
|
26
|
+
spec.full_require_paths
|
27
|
+
.first
|
28
|
+
end)
|
35
29
|
end
|
36
30
|
def with_file_header(str)
|
37
31
|
"#{Visitor::FILE_HEADER}\n\n#{str}"
|
data/lib/gloss/version.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
# frozen_string_literal: true
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
##### This file was generated by Gloss; any changes made here will be overwritten.
|
4
|
-
##### See src/ to make changes
|
3
|
+
##### This file was generated by Gloss; any changes made here will be overwritten.
|
4
|
+
##### See src/ to make changes
|
5
5
|
|
6
6
|
module Gloss
|
7
|
-
VERSION = "0.1.
|
7
|
+
VERSION = "0.1.4"
|
8
8
|
end
|
data/lib/gloss/visitor.rb
CHANGED
@@ -184,6 +184,7 @@ EMPTY_ARRAY }
|
|
184
184
|
else
|
185
185
|
nil
|
186
186
|
end)
|
187
|
+
name = node.[](:"name")
|
187
188
|
block = (if node.[](:"block")
|
188
189
|
" #{visit_node(node.[](:"block"))}"
|
189
190
|
else
|
@@ -195,14 +196,21 @@ EMPTY_ARRAY }
|
|
195
196
|
else
|
196
197
|
nil
|
197
198
|
end)
|
198
|
-
name = node.[](:"name")
|
199
199
|
call = "#{obj}#{name}#{opening_delimiter}#{args}#{(if has_parens
|
200
200
|
")"
|
201
201
|
end)}#{block}"
|
202
202
|
case name
|
203
203
|
when "require_relative"
|
204
204
|
(if @on_new_file_referenced
|
205
|
-
|
205
|
+
paths = arg_arr.map() { |a|
|
206
|
+
unless a.[](:"type")
|
207
|
+
.==("LiteralNode")
|
208
|
+
throw(:"error", "Dynamic file paths are not allowed in require_relative")
|
209
|
+
end
|
210
|
+
eval(visit_node(a, scope)
|
211
|
+
.strip)
|
212
|
+
}
|
213
|
+
@on_new_file_referenced.call(paths, true)
|
206
214
|
end)
|
207
215
|
when "module_function"
|
208
216
|
@after_module_function = true
|
@@ -254,7 +262,7 @@ case name
|
|
254
262
|
path = node.[](:"value")
|
255
263
|
src.write_ln("require \"#{path}\"")
|
256
264
|
(if @on_new_file_referenced
|
257
|
-
@on_new_file_referenced.call(path, false)
|
265
|
+
@on_new_file_referenced.call([path], false)
|
258
266
|
end)
|
259
267
|
when "Assign", "OpAssign"
|
260
268
|
src.write_ln("#{visit_node(node.[](:"target"))} #{node.[](:"op")}= #{visit_node(node.[](:"value"))
|
data/lib/gloss/watcher.rb
CHANGED
@@ -6,6 +6,8 @@
|
|
6
6
|
require "listen"
|
7
7
|
module Gloss
|
8
8
|
class Watcher
|
9
|
+
# @type var @listener: Listen?
|
10
|
+
@listener
|
9
11
|
def initialize(paths)
|
10
12
|
@paths = paths
|
11
13
|
(if @paths.empty?
|
@@ -32,7 +34,7 @@ module Gloss
|
|
32
34
|
def watch()
|
33
35
|
Gloss.logger
|
34
36
|
.info("Now listening for changes in #{@paths.join(", ")}")
|
35
|
-
listener
|
37
|
+
@listener ||= Listen.to(*@paths, latency: 2, only: @only) { |modified, added, removed|
|
36
38
|
modified.+(added)
|
37
39
|
.each() { |f|
|
38
40
|
Gloss.logger
|
@@ -64,13 +66,18 @@ nil }
|
|
64
66
|
}
|
65
67
|
}
|
66
68
|
begin
|
67
|
-
listener.start
|
69
|
+
@listener.start
|
68
70
|
sleep
|
69
71
|
rescue Interrupt
|
70
|
-
|
71
|
-
.info("Interrupt signal received, shutting down")
|
72
|
-
exit(0)
|
72
|
+
kill
|
73
73
|
end
|
74
74
|
end
|
75
|
+
def kill()
|
76
|
+
Gloss.logger
|
77
|
+
.info("Interrupt signal received, shutting down")
|
78
|
+
(if @listener
|
79
|
+
@listener.stop
|
80
|
+
end)
|
81
|
+
end
|
75
82
|
end
|
76
83
|
end
|
data/logo.svg
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
<svg width="171px" height="100px" xmlns="http://www.w3.org/2000/svg" viewBox="175 25 150 150" style="background-color: transparent;" preserveAspectRatio="xMidYMid"><defs><filter id="editing-golden" x="-100%" y="-100%" width="300%" height="300%"><feFlood flood-color="#000000" result="flood"></feFlood><feFlood flood-color="#eaa5a5" result="flood-light"></feFlood><feComposite operator="in" in="flood" in2="SourceAlpha" result="flood-comp"></feComposite><feGaussianBlur in="flood-comp" stdDeviation="3" result="blur"></feGaussianBlur><feOffset in="blur" dy="3" result="offset-blur"></feOffset><feComponentTransfer in="offset-blur" result="comp-blur"><feFuncA type="linear" slope="0.7" intercept="-0.1"></feFuncA></feComponentTransfer><feSpecularLighting surfaceScale="200" specularConstant="20" specularExponent="1" lighting-color="#fff" in="blur" result="specular"><fePointLight x="-250" y="-250" z="3500"></fePointLight></feSpecularLighting><feComponentTransfer in="specular" result="inspecular"><feFuncA type="linear" slope="-1" intercept="1"></feFuncA></feComponentTransfer><feComposite operator="in" in="flood-light" in2="inspecular" result="inspecular2"></feComposite><feComposite operator="in" in="inspecular2" in2="SourceAlpha" result="light"></feComposite><feMerge><feMergeNode in="comp-blur"></feMergeNode><feMergeNode in="SourceGraphic"></feMergeNode><feMergeNode in="light"></feMergeNode></feMerge></filter></defs><g filter="url(#editing-golden)"><g transform="translate(119.08499717712402, 130.10500073432922)"><path d="M27.50-50.40L27.50-50.40L27.50-50.40Q23.22-39.91 23.22-30.87L23.22-30.87L23.22-30.87Q23.22-21.83 26.91-17.55L26.91-17.55L26.91-17.55Q30.60-13.27 38.84-13.27L38.84-13.27L38.84-13.27Q43.76-13.27 47.51-16.80L47.51-16.80L47.51-16.80Q48.69-25.57 49.43-28.46L49.43-28.46L49.43-28.46Q51.25-35.52 55.00-35.52L55.00-35.52L55.00-35.52Q57.99-35.52 60.67-31.40L60.67-31.40L60.67-31.40Q63.34-27.29 63.24-24.40L63.24-24.40L63.24-24.40Q63.24-19.58 59.38-6.53L59.38-6.53L59.38-6.53Q66.88-12.20 76.61-23.33L76.61-23.33L76.61-23.33Q78.00-24.93 78.97-24.93L78.97-24.93L78.97-24.93Q80.46-24.93 80.46-21.40L80.46-21.40L80.46-21.40Q80.46-14.55 73.62-6.79L73.62-6.79L73.62-6.79Q66.77 0.96 55.43 5.56L55.43 5.56L55.43 5.56Q54.57 7.60 54.03 9.42L54.03 9.42L54.03 9.42Q53.50 11.23 52.64 13.80L52.64 13.80L52.64 13.80Q51.79 16.37 49.65 19.42L49.65 19.42L49.65 19.42Q47.51 22.47 44.30 24.61L44.30 24.61L44.30 24.61Q37.45 29.32 28.62 29.32L28.62 29.32L28.62 29.32Q19.79 29.32 13.86 25.41L13.86 25.41L13.86 25.41Q7.92 21.51 7.92 14.66L7.92 14.66L7.92 14.66Q7.92 11.34 11.13 9.20L11.13 9.20L11.13 9.20Q14.34 7.06 19.47 5.51L19.47 5.51L19.47 5.51Q24.61 3.96 31.03 2.78L31.03 2.78L31.03 2.78Q37.45 1.60 43.87 0.11L43.87 0.11L43.87 0.11Q44.73-2.35 45.15-4.49L45.15-4.49L45.15-4.49Q40.98-1.28 34.88-1.28L34.88-1.28L34.88-1.28Q22.15-1.28 14.87-6.53L14.87-6.53L14.87-6.53Q6.42-12.63 6.42-25.57L6.42-25.57L6.42-25.57Q6.42-42.48 14.98-57.67L14.98-57.67L14.98-57.67Q12.41-60.67 10.81-63.93L10.81-63.93L10.81-63.93Q9.20-67.20 9.20-68.91L9.20-68.91L9.20-68.91Q9.20-71.90 11.34-71.80L11.34-71.80L11.34-71.80Q12.73-71.80 14.55-70.08L14.55-70.08L14.55-70.08Q16.37-68.37 17.49-67.20L17.49-67.20L17.49-67.20Q18.62-66.02 19.90-65.06L19.90-65.06L19.90-65.06Q25.47-72.12 32.96-76.50L32.96-76.50L32.96-76.50Q40.45-80.89 49.43-80.89L49.43-80.89L49.43-80.89Q58.42-80.89 63.45-77.58L63.45-77.58L63.45-77.58Q68.48-74.26 68.48-66.02L68.48-66.02L68.48-66.02Q68.48-57.78 62.11-52.32L62.11-52.32L62.11-52.32Q55.75-46.87 44.41-46.87L44.41-46.87L44.41-46.87Q36.59-46.87 27.50-50.40ZM31.03-57.67L31.03-57.67L31.03-57.67Q36.91-55.10 45.26-55.10L45.26-55.10L45.26-55.10Q50.40-55.10 53.50-57.89L53.50-57.89L53.50-57.89Q56.60-60.67 56.60-63.93L56.60-63.93L56.60-63.93Q56.60-67.20 54.52-68.75L54.52-68.75L54.52-68.75Q52.43-70.30 49.01-70.30L49.01-70.30L49.01-70.30Q38.73-70.30 31.03-57.67ZM27.39 21.08L27.39 21.08L27.39 21.08Q34.67 21.08 40.13 10.16L40.13 10.16L40.13 10.16Q34.24 11.66 30.17 12.52L30.17 12.52L30.17 12.52Q26.11 13.38 23.59 14.02L23.59 14.02L23.59 14.02Q21.08 14.66 19.96 15.30L19.96 15.30L19.96 15.30Q18.83 15.94 18.83 17.12L18.83 17.12L18.83 17.12Q18.83 19.15 21.56 20.06L21.56 20.06L21.56 20.06Q24.29 20.97 27.39 21.08ZM98.97 0.32L98.97 0.32L98.97 0.32Q83.67 0.43 78.11-11.13L78.11-11.13L78.11-11.13Q76.18-15.19 76.18-21.35L76.18-21.35L76.18-21.35Q76.18-27.50 77.25-34.45L77.25-34.45L77.25-34.45Q79.39-48.36 85.49-60.13L85.49-60.13L85.49-60.13Q88.60-66.13 92.45-70.41L92.45-70.41L92.45-70.41Q100.90-79.82 111.28-79.72L111.28-79.72L111.28-79.72Q115.88-79.72 118.50-77.20L118.50-77.20L118.50-77.20Q121.12-74.69 121.12-69.98L121.12-69.98L121.12-69.98Q121.12-65.27 118.34-60.51L118.34-60.51L118.34-60.51Q115.56-55.75 111.23-50.66L111.23-50.66L111.23-50.66Q106.89-45.58 101.65-40.02L101.65-40.02L101.65-40.02Q96.41-34.45 91.38-27.93L91.38-27.93L91.38-23.65L91.38-23.65Q91.38-17.66 93.95-14.87L93.95-14.87L93.95-14.87Q96.51-12.09 99.94-12.09L99.94-12.09L99.94-12.09Q109.14-12.09 116.20-21.19L116.20-21.19L116.20-21.19Q119.09-24.93 120.59-24.93L120.59-24.93L120.59-24.93Q122.09-24.93 122.09-21.29L122.09-21.29L122.09-21.29Q122.09-17.66 120.11-13.86L120.11-13.86L120.11-13.86Q118.13-10.06 114.92-6.90L114.92-6.90L114.92-6.90Q111.71-3.75 107.53-1.71L107.53-1.71L107.53-1.71Q103.36 0.32 98.97 0.32ZM104.75-57.14L104.75-57.14L104.75-57.14Q107-59.92 108.28-62.17L108.28-62.17L108.28-62.17Q109.57-64.41 109.57-66.82L109.57-66.82L109.57-66.82Q109.57-69.23 107.86-69.23L107.86-69.23L107.86-69.23Q104.11-69.23 99.56-61.52L99.56-61.52L99.56-61.52Q95.02-53.82 92.77-41.30L92.77-41.30L92.77-41.30Q96.41-46.87 99.46-50.61L99.46-50.61L99.46-50.61Q102.51-54.36 104.75-57.14ZM159.00-9.10L159.00-9.10L159.00-9.10Q150.55 0.86 138.73 0.86L138.73 0.86L138.73 0.86Q126.90 0.86 121.02-5.19L121.02-5.19L121.02-5.19Q115.13-11.23 115.24-20.22L115.24-20.22L115.24-20.22Q115.13-32.96 123.26-42.16L123.26-42.16L123.26-42.16Q131.40-51.36 144.56-51.36L144.56-51.36L144.56-51.36Q150.55-51.36 154.19-49.86L154.19-49.86L154.19-49.86Q160.50-47.29 160.50-45.05L160.50-45.05L160.50-45.05Q160.50-43.34 151.67-43.28L151.67-43.28L151.67-43.28Q142.84-43.23 136.91-37.18L136.91-37.18L136.91-37.18Q130.97-31.14 130.97-21.93L130.97-21.93L130.97-21.93Q130.97-17.12 133.80-13.86L133.80-13.86L133.80-13.86Q136.64-10.59 141.83-10.59L141.83-10.59L141.83-10.59Q147.02-10.59 150.44-12.73L150.44-12.73L150.44-12.73Q142.84-17.87 142.84-27.61L142.84-27.61L142.84-27.61Q142.74-32.74 146.54-36.97L146.54-36.97L146.54-36.97Q150.33-41.20 156.27-41.25L156.27-41.25L156.27-41.25Q162.21-41.30 164.78-37.98L164.78-37.98L164.78-37.98Q167.35-34.67 167.35-29.48L167.35-29.48L167.35-29.48Q167.35-24.29 164.89-18.51L164.89-18.51L165.53-18.51L165.53-18.51Q170.24-18.62 173.66-21.83L173.66-21.83L173.66-21.83Q174.94-23.11 175.85-24.07L175.85-24.07L175.85-24.07Q176.76-25.04 177.73-25.04L177.73-25.04L177.73-25.04Q179.22-25.04 179.22-21.51L179.22-21.51L179.22-21.51Q179.22-14.98 175.37-11.72L175.37-11.72L175.37-11.72Q171.52-8.45 166.87-8.45L166.87-8.45L166.87-8.45Q162.21-8.45 159.00-9.10ZM158.04-21.51L158.04-21.51L158.04-21.51Q159.86-25.36 159.86-29.00L159.86-29.00L159.86-29.00Q159.86-32.63 157.50-32.63L157.50-32.63L157.50-32.63Q156.54-32.63 155.90-31.24L155.90-31.24L155.90-31.24Q155.26-29.85 155.26-28.57L155.26-28.57L155.26-28.57Q155.26-24.29 158.04-21.51ZM198.27-51.84L198.27-51.84L198.27-51.84Q205.44-51.89 208.97-49.17L208.97-49.17L208.97-49.17Q212.50-46.44 212.50-41.36L212.50-41.36L212.50-41.36Q212.50-36.27 209.45-32.69L209.45-32.69L209.45-32.69Q206.40-29.10 202.02-27.61L202.02-27.61L202.02-27.61Q205.12-24.40 207.63-21.08L207.63-21.08L207.63-21.08Q210.15-17.76 210.15-14.12L210.15-14.12L210.15-14.12Q210.15-6.96 204.48-3.05L204.48-3.05L204.48-3.05Q198.81 0.86 188.69 0.86L188.69 0.86L188.69 0.86Q178.58 0.86 173.55-3.16L173.55-3.16L173.55-3.16Q168.53-7.17 168.53-12.25L168.53-12.25L168.53-12.25Q168.53-17.33 171.04-21.51L171.04-21.51L171.04-21.51Q173.55-25.68 176.44-25.68L176.44-25.68L176.44-25.68Q178.16-25.68 178.90-24.45L178.90-24.45L178.90-24.45Q179.65-23.22 181.69-17.33L181.69-17.33L181.69-17.33Q182.44-15.19 184.15-13.27L184.15-13.27L184.15-13.27Q188.11-8.88 196.67-8.88L196.67-8.88L196.67-8.88Q195.38-12.95 192.55-15.89L192.55-15.89L192.55-15.89Q189.71-18.83 186.93-21.61L186.93-21.61L186.93-21.61Q184.15-24.40 182.01-27.55L182.01-27.55L182.01-27.55Q179.87-30.71 179.87-34.99L179.87-34.99L179.87-34.99Q179.87-42.69 185.64-47.51L185.64-47.51L185.64-47.51Q191.10-51.79 198.27-51.84ZM197.84-31.99L197.84-31.99L197.84-31.99Q202.12-36.59 202.12-39.38L202.12-39.38L202.12-39.38Q202.12-40.66 201.21-41.68L201.21-41.68L201.21-41.68Q200.30-42.69 198.59-42.69L198.59-42.69L198.59-42.69Q196.88-42.69 195.33-42.27L195.33-42.27L195.33-42.27Q193.78-41.84 192.81-41.62L192.81-41.62L192.81-41.62Q192.81-37.56 197.84-31.99ZM241.18-51.84L241.18-51.84L241.18-51.84Q248.35-51.89 251.88-49.17L251.88-49.17L251.88-49.17Q255.41-46.44 255.41-41.36L255.41-41.36L255.41-41.36Q255.41-36.27 252.36-32.69L252.36-32.69L252.36-32.69Q249.31-29.10 244.92-27.61L244.92-27.61L244.92-27.61Q248.03-24.40 250.54-21.08L250.54-21.08L250.54-21.08Q253.06-17.76 253.06-14.12L253.06-14.12L253.06-14.12Q253.06-6.96 247.38-3.05L247.38-3.05L247.38-3.05Q241.71 0.86 231.60 0.86L231.60 0.86L231.60 0.86Q221.49 0.86 216.46-3.16L216.46-3.16L216.46-3.16Q211.43-7.17 211.43-12.25L211.43-12.25L211.43-12.25Q211.43-17.33 213.95-21.51L213.95-21.51L213.95-21.51Q216.46-25.68 219.35-25.68L219.35-25.68L219.35-25.68Q221.06-25.68 221.81-24.45L221.81-24.45L221.81-24.45Q222.56-23.22 224.59-17.33L224.59-17.33L224.59-17.33Q225.34-15.19 227.05-13.27L227.05-13.27L227.05-13.27Q231.01-8.88 239.57-8.88L239.57-8.88L239.57-8.88Q238.29-12.95 235.45-15.89L235.45-15.89L235.45-15.89Q232.62-18.83 229.84-21.61L229.84-21.61L229.84-21.61Q227.05-24.40 224.91-27.55L224.91-27.55L224.91-27.55Q222.77-30.71 222.77-34.99L222.77-34.99L222.77-34.99Q222.77-42.69 228.55-47.51L228.55-47.51L228.55-47.51Q234.01-51.79 241.18-51.84ZM240.75-31.99L240.75-31.99L240.75-31.99Q245.03-36.59 245.03-39.38L245.03-39.38L245.03-39.38Q245.03-40.66 244.12-41.68L244.12-41.68L244.12-41.68Q243.21-42.69 241.50-42.69L241.50-42.69L241.50-42.69Q239.79-42.69 238.24-42.27L238.24-42.27L238.24-42.27Q236.68-41.84 235.72-41.62L235.72-41.62L235.72-41.62Q235.72-37.56 240.75-31.99Z" fill="#ae0606"></path></g></g><style>text {
|
2
|
+
font-size: 64px;
|
3
|
+
font-family: Arial Black;
|
4
|
+
dominant-baseline: central;
|
5
|
+
text-anchor: middle;
|
6
|
+
}</style></svg>
|
data/src/lib/gloss/config.gl
CHANGED
@@ -8,14 +8,19 @@ module Gloss
|
|
8
8
|
frozen_string_literals: true,
|
9
9
|
src_dir: "src",
|
10
10
|
entrypoint: nil,
|
11
|
-
strict_require: false
|
11
|
+
strict_require: false,
|
12
|
+
type_checking_strictness: "strict"
|
12
13
|
}
|
13
14
|
)
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
def self.load_config
|
17
|
+
user_config = if File.exist?(File.absolute_path(File.join(Dir.pwd, CONFIG_PATH)))
|
18
|
+
YAML.safe_load(File.read(CONFIG_PATH))
|
19
|
+
else
|
20
|
+
Config.default_config
|
21
|
+
end
|
22
|
+
Config.default_config.each { |k, v| Config.send(:"#{k}=", user_config[k.to_s] || v) }
|
23
|
+
end
|
24
|
+
|
25
|
+
load_config
|
21
26
|
end
|
data/src/lib/gloss/logger.gl
CHANGED
@@ -15,7 +15,9 @@ module Gloss
|
|
15
15
|
nil => nil,
|
16
16
|
"" => nil
|
17
17
|
}.fetch env_log_level
|
18
|
-
@logger = Logger.new(real_log_level ? STDOUT : IO::NULL)
|
18
|
+
@logger = Logger.new(real_log_level ? STDOUT : IO::NULL).tap do |l|
|
19
|
+
l.level = real_log_level if real_log_level
|
20
|
+
end
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -4,6 +4,8 @@ module Gloss
|
|
4
4
|
OUTPUT_BY_PATH = Hash.new
|
5
5
|
|
6
6
|
class ProgLoader
|
7
|
+
attr_reader :type_checker
|
8
|
+
|
7
9
|
def initialize
|
8
10
|
entrypoint = Config.entrypoint
|
9
11
|
if entrypoint == nil || entrypoint == ""
|
@@ -26,11 +28,13 @@ module Gloss
|
|
26
28
|
path = Utils.absolute_path(path_string)
|
27
29
|
file_contents = File.open(path).read
|
28
30
|
contents_tree = Parser.new(file_contents).run
|
29
|
-
on_new_file_referenced = proc do |
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
31
|
+
on_new_file_referenced = proc do |ps, relative|
|
32
|
+
ps.each do |pa|
|
33
|
+
if relative
|
34
|
+
handle_require_relative pa, path_string
|
35
|
+
else
|
36
|
+
handle_require pa
|
37
|
+
end
|
34
38
|
end
|
35
39
|
end
|
36
40
|
OUTPUT_BY_PATH.[](path_string) = Visitor.new(contents_tree, @type_checker, on_new_file_referenced).run
|
@@ -68,7 +72,7 @@ module Gloss
|
|
68
72
|
pathn = Pathname.new("#{File.join(Dir.pwd, "sig", path)}.rbs")
|
69
73
|
gem_path = Utils.gem_path_for(path)
|
70
74
|
if gem_path
|
71
|
-
sig_files = Dir.glob(File.absolute_path(File.join(gem_path, "..", "
|
75
|
+
sig_files = Dir.glob(File.absolute_path(File.join(gem_path, "..", "sig", "**", "*.rbs")))
|
72
76
|
if sig_files.length.positive?
|
73
77
|
sig_files.each do |fp|
|
74
78
|
@type_checker.load_sig_path fp
|
@@ -86,7 +90,7 @@ module Gloss
|
|
86
90
|
@type_checker.load_sig_path(pathn.to_s)
|
87
91
|
@processed_files.add pathn.to_s
|
88
92
|
else
|
89
|
-
rbs_stdlib_dir = File.absolute_path(File.join(@type_checker.rbs_gem_dir, "..", "
|
93
|
+
rbs_stdlib_dir = File.absolute_path(File.join(@type_checker.rbs_gem_dir, "..", "stdlib", path))
|
90
94
|
if Pathname.new(rbs_stdlib_dir).exist?
|
91
95
|
load_rbs_from_require_path(path)
|
92
96
|
rbs_type_deps = STDLIB_TYPE_DEPENDENCIES.fetch(path) { nil }
|
@@ -102,10 +106,11 @@ module Gloss
|
|
102
106
|
end
|
103
107
|
end
|
104
108
|
|
105
|
-
private def handle_require_relative(path)
|
106
|
-
base = File.join(
|
109
|
+
private def handle_require_relative(path, source_file)
|
110
|
+
base = File.join(source_file, "..", path)
|
107
111
|
pn : String? = nil
|
108
|
-
Gem.suffixes
|
112
|
+
exts = %w[.gl].concat(Gem.suffixes)
|
113
|
+
exts.each do |ext|
|
109
114
|
full = File.absolute_path(base + ext)
|
110
115
|
pn = full if File.exist?(full)
|
111
116
|
end
|
@@ -113,14 +118,14 @@ module Gloss
|
|
113
118
|
if pn
|
114
119
|
@files_to_process << pn unless @files_to_process.include? pn
|
115
120
|
elsif Config.strict_require
|
116
|
-
throw :error, "Cannot resolve
|
121
|
+
throw :error, "Cannot resolve relative path for #{path}"
|
117
122
|
else
|
118
123
|
Gloss.logger.debug "No path found for #{path}"
|
119
124
|
end
|
120
125
|
end
|
121
126
|
|
122
127
|
private def rbs_stdlib_path_for(libr)
|
123
|
-
File.absolute_path(File.join(@type_checker.rbs_gem_dir, "..", "
|
128
|
+
File.absolute_path(File.join(@type_checker.rbs_gem_dir, "..", "stdlib", libr))
|
124
129
|
end
|
125
130
|
|
126
131
|
private def load_rbs_from_require_path(path)
|
@@ -2,16 +2,27 @@ require "set"
|
|
2
2
|
|
3
3
|
module Gloss
|
4
4
|
class TypeChecker
|
5
|
-
Project = Struct.new :targets
|
6
|
-
|
7
5
|
attr_reader :steep_target, :top_level_decls, :env, :rbs_gem_dir
|
8
6
|
|
7
|
+
enum Strictness
|
8
|
+
Strict = "strict"
|
9
|
+
Lenient = "lenient"
|
10
|
+
Default = "default"
|
11
|
+
end
|
12
|
+
|
9
13
|
def initialize
|
14
|
+
options = Steep::Project::Options.new
|
15
|
+
case Config.type_checking_strictness
|
16
|
+
when Strictness::Strict
|
17
|
+
options.apply_strict_typing_options!
|
18
|
+
when Strictness::Lenient
|
19
|
+
options.apply_lenient_typing_options!
|
20
|
+
else
|
21
|
+
options.apply_default_typing_options!
|
22
|
+
end
|
10
23
|
@steep_target = Steep::Project::Target.new(
|
11
24
|
name: "gloss",
|
12
|
-
options:
|
13
|
-
o.allow_unknown_constant_assignment = true
|
14
|
-
end,
|
25
|
+
options: options,
|
15
26
|
source_patterns: ["**/*.rb"],
|
16
27
|
ignore_patterns: Array.new,
|
17
28
|
signature_patterns: ["sig"]
|
@@ -54,7 +65,7 @@ module Gloss
|
|
54
65
|
when Steep::Diagnostic::Ruby::UnexpectedBlockGiven
|
55
66
|
"Unexpected block given"
|
56
67
|
else
|
57
|
-
"#{e.header_line}\n#{e
|
68
|
+
"#{e.header_line}\n#{e}"
|
58
69
|
end
|
59
70
|
}.join("\n")
|
60
71
|
throw :error, errors
|
data/src/lib/gloss/utils.gl
CHANGED
@@ -19,11 +19,8 @@ module Gloss
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def gem_path_for(gem_name)
|
22
|
-
|
23
|
-
|
24
|
-
Gem.ui.outs.string
|
25
|
-
rescue SystemExit => e
|
26
|
-
nil
|
22
|
+
spec = Gem::Specification.find_by_path(gem_name)
|
23
|
+
spec.full_require_paths.first if spec
|
27
24
|
end
|
28
25
|
|
29
26
|
def with_file_header(str)
|
data/src/lib/gloss/version.gl
CHANGED
data/src/lib/gloss/visitor.gl
CHANGED
@@ -102,7 +102,7 @@ module Gloss
|
|
102
102
|
members: Array.new, # TODO
|
103
103
|
annotations: Array.new, # TODO
|
104
104
|
location: build_location(node),
|
105
|
-
comment: node[:comment]
|
105
|
+
comment: node[:comment],
|
106
106
|
)
|
107
107
|
old_parent_scope = @current_scope
|
108
108
|
@current_scope = module_type
|
@@ -202,6 +202,7 @@ module Gloss
|
|
202
202
|
else
|
203
203
|
nil
|
204
204
|
end
|
205
|
+
name = node[:name]
|
205
206
|
block = node[:block] ? " #{visit_node(node[:block])}" : nil
|
206
207
|
has_parens = !!(node[:has_parentheses] || args || block)
|
207
208
|
opening_delimiter = if has_parens
|
@@ -209,11 +210,18 @@ module Gloss
|
|
209
210
|
else
|
210
211
|
nil
|
211
212
|
end
|
212
|
-
name = node[:name]
|
213
213
|
call = "#{obj}#{name}#{opening_delimiter}#{args}#{")" if has_parens}#{block}"
|
214
214
|
case name
|
215
215
|
when "require_relative"
|
216
|
-
|
216
|
+
if @on_new_file_referenced
|
217
|
+
paths = arg_arr.map do |a|
|
218
|
+
unless a[:type] == "LiteralNode"
|
219
|
+
throw :error, "Dynamic file paths are not allowed in require_relative"
|
220
|
+
end
|
221
|
+
eval(visit_node(a, scope).strip)
|
222
|
+
end
|
223
|
+
@on_new_file_referenced.call(paths, true)
|
224
|
+
end
|
217
225
|
when "module_function"
|
218
226
|
@after_module_function = true
|
219
227
|
end
|
@@ -264,7 +272,7 @@ module Gloss
|
|
264
272
|
path = node[:value]
|
265
273
|
src.write_ln %(require "#{path}")
|
266
274
|
|
267
|
-
@on_new_file_referenced.call(path, false) if @on_new_file_referenced
|
275
|
+
@on_new_file_referenced.call([path], false) if @on_new_file_referenced
|
268
276
|
when "Assign", "OpAssign"
|
269
277
|
|
270
278
|
src.write_ln "#{visit_node(node[:target])} #{node[:op]}= #{visit_node(node[:value]).strip}"
|
data/src/lib/gloss/watcher.gl
CHANGED
@@ -2,6 +2,8 @@ require "listen"
|
|
2
2
|
|
3
3
|
module Gloss
|
4
4
|
class Watcher
|
5
|
+
@listener: Listen?
|
6
|
+
|
5
7
|
def initialize(@paths : Array[String])
|
6
8
|
if @paths.empty?
|
7
9
|
@paths = [File.join(Dir.pwd, Config.src_dir)]
|
@@ -22,7 +24,7 @@ module Gloss
|
|
22
24
|
|
23
25
|
def watch
|
24
26
|
Gloss.logger.info "Now listening for changes in #{@paths.join(', ')}"
|
25
|
-
listener
|
27
|
+
@listener ||= Listen.to(
|
26
28
|
*@paths,
|
27
29
|
latency: 2,
|
28
30
|
only: @only
|
@@ -55,12 +57,16 @@ module Gloss
|
|
55
57
|
end
|
56
58
|
end
|
57
59
|
begin
|
58
|
-
listener.start
|
60
|
+
@listener.start
|
59
61
|
sleep
|
60
62
|
rescue Interrupt
|
61
|
-
|
62
|
-
exit 0
|
63
|
+
kill
|
63
64
|
end
|
64
65
|
end
|
66
|
+
|
67
|
+
def kill
|
68
|
+
Gloss.logger.info "Interrupt signal received, shutting down"
|
69
|
+
@listener.stop if @listener
|
70
|
+
end
|
65
71
|
end
|
66
72
|
end
|
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.1.
|
4
|
+
version: 0.1.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-03-
|
11
|
+
date: 2021-03-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fast_blank
|
@@ -42,32 +42,32 @@ dependencies:
|
|
42
42
|
name: rbs
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 1.0.4
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 1.0.4
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: steep
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 0.41.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 0.41.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: pry-byebug
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - ">="
|
@@ -81,7 +81,7 @@ dependencies:
|
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: rake-compiler
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - ">="
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -132,9 +132,7 @@ extensions:
|
|
132
132
|
extra_rdoc_files: []
|
133
133
|
files:
|
134
134
|
- ".gitattributes"
|
135
|
-
- ".github/workflows/
|
136
|
-
- ".github/workflows/ruby_specs.yml"
|
137
|
-
- ".github/workflows/self_build.yml"
|
135
|
+
- ".github/workflows/tests.yml"
|
138
136
|
- ".gitignore"
|
139
137
|
- ".gloss.yml"
|
140
138
|
- ".rspec"
|
@@ -175,6 +173,7 @@ files:
|
|
175
173
|
- lib/gloss/visitor.rb
|
176
174
|
- lib/gloss/watcher.rb
|
177
175
|
- lib/gloss/writer.rb
|
176
|
+
- logo.svg
|
178
177
|
- sig/core.rbs
|
179
178
|
- sig/fast_blank.rbs
|
180
179
|
- sig/gls.rbs
|
@@ -1,26 +0,0 @@
|
|
1
|
-
name: Crystal Specs
|
2
|
-
|
3
|
-
on:
|
4
|
-
push:
|
5
|
-
branches: [ master ]
|
6
|
-
pull_request:
|
7
|
-
branches: [ master ]
|
8
|
-
|
9
|
-
defaults:
|
10
|
-
run:
|
11
|
-
working-directory: ext/gloss
|
12
|
-
|
13
|
-
jobs:
|
14
|
-
build:
|
15
|
-
|
16
|
-
runs-on: ubuntu-latest
|
17
|
-
|
18
|
-
container:
|
19
|
-
image: crystallang/crystal
|
20
|
-
|
21
|
-
steps:
|
22
|
-
- uses: actions/checkout@v2
|
23
|
-
- name: Install dependencies
|
24
|
-
run: shards install
|
25
|
-
- name: Run tests
|
26
|
-
run: crystal spec
|
@@ -1,33 +0,0 @@
|
|
1
|
-
# This workflow uses actions that are not certified by GitHub.
|
2
|
-
# They are provided by a third-party and are governed by
|
3
|
-
# separate terms of service, privacy policy, and support
|
4
|
-
# documentation.
|
5
|
-
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
-
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
-
|
8
|
-
name: Ruby Specs
|
9
|
-
|
10
|
-
on:
|
11
|
-
push:
|
12
|
-
branches: [ master ]
|
13
|
-
pull_request:
|
14
|
-
branches: [ master ]
|
15
|
-
|
16
|
-
jobs:
|
17
|
-
test:
|
18
|
-
|
19
|
-
runs-on: ubuntu-20.04
|
20
|
-
|
21
|
-
steps:
|
22
|
-
- uses: actions/checkout@v2
|
23
|
-
- name: Set up Ruby
|
24
|
-
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
25
|
-
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
26
|
-
# uses: ruby/setup-ruby@v1
|
27
|
-
uses: ruby/setup-ruby@21351ecc0a7c196081abca5dc55b08f085efe09a
|
28
|
-
with:
|
29
|
-
ruby-version: 2.7
|
30
|
-
- name: Install dependencies
|
31
|
-
run: bundle install
|
32
|
-
- name: Run tests
|
33
|
-
run: bundle exec rake build && bundle exec rake spec
|
@@ -1,45 +0,0 @@
|
|
1
|
-
name: Self Build
|
2
|
-
|
3
|
-
on:
|
4
|
-
push:
|
5
|
-
branches: [ master ]
|
6
|
-
pull_request:
|
7
|
-
branches: [ master ]
|
8
|
-
env:
|
9
|
-
ImageOS: ubuntu18
|
10
|
-
jobs:
|
11
|
-
build:
|
12
|
-
|
13
|
-
runs-on: ubuntu-latest
|
14
|
-
|
15
|
-
container:
|
16
|
-
image: crystallang/crystal
|
17
|
-
|
18
|
-
steps:
|
19
|
-
- uses: actions/checkout@v2
|
20
|
-
- name: Set up Ruby
|
21
|
-
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
22
|
-
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
23
|
-
# uses: ruby/setup-ruby@v1
|
24
|
-
uses: ruby/setup-ruby@21351ecc0a7c196081abca5dc55b08f085efe09a
|
25
|
-
with:
|
26
|
-
ruby-version: 2.7
|
27
|
-
- name: Install ruby-dev
|
28
|
-
run: apt-get update -y && apt-get install -y ruby-dev
|
29
|
-
- uses: actions/cache@v2
|
30
|
-
id: gems-cache
|
31
|
-
with:
|
32
|
-
path: vendor/bundle
|
33
|
-
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
34
|
-
restore-keys: |
|
35
|
-
${{ runner.os }}-gems-
|
36
|
-
- name: install Bundler
|
37
|
-
run: gem install bundler:2.2.3
|
38
|
-
- name: install gems
|
39
|
-
run: bundle install --jobs 4 --retry 3
|
40
|
-
- name: build native extensions
|
41
|
-
run: cd ext/gloss && make && cd -
|
42
|
-
- name: Build self with current state
|
43
|
-
run: ls lib/ && exe/gloss build
|
44
|
-
- name: check installation from rubygems
|
45
|
-
run: gem install gloss
|