gloss 0.1.1 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 265e6f48bffa061f213e15f98be4d31b97c900701e95c381c1176048d9e8a75f
4
- data.tar.gz: 9398669043cd6de339664f87529388f68d83f519d650b72ea06de6715d7477bb
3
+ metadata.gz: 9239f0e7898094d7957a2e1eae3b980ff57f94be27eea836f00561262eb8f8d4
4
+ data.tar.gz: 0ffa974e3146f699a9280878a412f589005cc4723f262c377a215aacd5cae146
5
5
  SHA512:
6
- metadata.gz: d0ef0a2208f005eaa87c77fcc2e1cca5e2bdf4d08e712a70d0cf5dfa57e4a3d45a691dbc873f47d7c95a928ea48d36fa885b9ca2a62b52e55a42f7ae3540613d
7
- data.tar.gz: a21377a395aa60bec26f0d420b8bb2124cb121994bf635b34653e290f0d2441f160888755695711ee6c1dd0e1e16da65fca9c6423a1b0f4600a7a15dc4b4a5a3
6
+ metadata.gz: 97ef28c0abd86a51f35224661765950f9aab162cb119f7a0d2b05e3d985464f25c58546b0c191cd69fc537a1b921c22ebd8d7c2d4bd446257d17e9b6a454c346
7
+ data.tar.gz: a9c9b94fbe5ec96b3be1a5c67d5149219d0e138ef7081190c133676c784865fb90d3c1b86b250b0eb207d890c67120a86f27763c5de105baadf550bc158a464f
@@ -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
@@ -2,3 +2,4 @@
2
2
  frozen_string_literals: true
3
3
  src_dir: src
4
4
  entrypoint: src/exe/gloss
5
+ type_checking_strictness: lenient
data/Gemfile.lock CHANGED
@@ -1,22 +1,22 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gloss (0.1.1)
4
+ gloss (0.1.6)
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.1)
13
+ activesupport (6.1.3.1)
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.1)
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.14.2)
28
- i18n (1.8.8)
27
+ ffi (1.15.0)
28
+ i18n (1.8.9)
29
29
  concurrent-ruby (~> 1.0)
30
- language_server-protocol (3.15.0.1)
31
- listen (3.4.1)
30
+ language_server-protocol (3.15.0.2)
31
+ listen (3.5.0)
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.3)
35
+ minitest (5.14.4)
36
36
  parallel (1.20.1)
37
37
  parser (2.7.2.0)
38
38
  ast (~> 2.4.1)
@@ -77,6 +77,7 @@ GEM
77
77
  rubocop-ast (1.4.0)
78
78
  parser (>= 2.7.1.5)
79
79
  ruby-progressbar (1.11.0)
80
+ rufo (0.12.0)
80
81
  steep (0.41.0)
81
82
  activesupport (>= 5.1)
82
83
  ast_utils (>= 0.4.0)
@@ -99,6 +100,7 @@ DEPENDENCIES
99
100
  rake-compiler
100
101
  rspec
101
102
  rubocop
103
+ rufo
102
104
 
103
105
  BUNDLED WITH
104
106
  2.2.3
data/README.md CHANGED
@@ -1,13 +1,10 @@
1
- # Gloss
1
+ # ![Gloss](./logo.svg "Gloss")
2
2
  [![Gem Version](https://badge.fury.io/rb/gloss.svg)](https://rubygems.org/gems/gloss)
3
- [![Ruby Specs](https://github.com/johansenja/gloss/workflows/Ruby%20Specs/badge.svg)](https://github.com/johansenja/gloss/actions?query=workflow%3A%22Ruby+Specs%22)
4
- [![Crystal Specs](https://github.com/johansenja/gloss/workflows/Crystal%20Specs/badge.svg)](https://github.com/johansenja/gloss/actions?query=workflow%3A%22Crystal+Specs%22)
5
- [![Total Downloads](http://ruby-gem-downloads-badge.herokuapp.com/gloss?type=total&color=green&metric=true&label=downloads%20(total)&total_label=)](https://rubygems.org/gems/gloss)
3
+ [![Tests](https://github.com/johansenja/gloss/workflows/Tests/badge.svg)](https://github.com/johansenja/gloss/actions?query=workflow%3ATests)
4
+ [![Total Downloads](http://ruby-gem-downloads-badge.herokuapp.com/gloss?type=total&color=green&label=downloads%20(total)&total_label=)](https://rubygems.org/gems/gloss)
6
5
  [![Current Version](http://ruby-gem-downloads-badge.herokuapp.com/gloss?color=green&label=downloads%20(current%20version)&metric=true)](https://rubygems.org/gems/gloss)
7
- [![Total Views](https://counter.gofiber.io/badge/johansenja/gloss)](https://rubygems.org/gems/gloss)
8
6
 
9
- [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,
10
- efficiency, and to enhance ruby's goal of developer happiness and productivity.
7
+ [Gloss](https://en.wikipedia.org/wiki/Gloss_(annotation)) is a language project inspired by [Crystal](https://github.com/crystal-lang/crystal), Ruby's [RBS](https://github.com/ruby/rbs), [Steep](https://github.com/soutaro/steep) and [TypeScript](https://github.com/microsoft/TypeScript). It compiles to pure Ruby.
11
8
 
12
9
  ### Current features
13
10
 
@@ -22,23 +19,6 @@ efficiency, and to enhance ruby's goal of developer happiness and productivity.
22
19
 
23
20
  This project is at a stage where the core non-crystal parts are written in Gloss and compile to ruby (essentially self-hosting), albeit with the type checking being fairly loose. However the project is still in the very early stages; with (as of yet) no Linux support nor error handling (see roadmap below). Use at your own discretion!
24
21
 
25
- ### Approx. roadmap:
26
-
27
- - Improve error handling and logging (currently almost non-existant)
28
- - Address Linux compatibility (currently more or less non-existant)
29
- - Implement different strictnesses of type checking
30
- - Metaprogramming helpers/safety:*
31
- - Abstract classes and methods
32
- - Method lookup/existence checking at compile time
33
- - Method overloading
34
-
35
- #### Related items:
36
-
37
- - Rails helpers; probably some time away*
38
- - Editor plugins/syntax highlighting/langserver; probably some time away*
39
-
40
- *__Dependent on popularity__
41
-
42
22
  ## Examples:
43
23
 
44
24
  #### Type checking:
@@ -137,7 +117,7 @@ class Language
137
117
  TS = "TypeScript"
138
118
  P = "Python"
139
119
  end
140
-
120
+
141
121
  def favourite_language(language : Lang)
142
122
  puts "my favourite language is #{language}"
143
123
  end
@@ -213,7 +193,7 @@ end
213
193
  ```crystal
214
194
  abstract class BaseClass
215
195
  attr_reader :var
216
-
196
+
217
197
  def initialize(@var); end
218
198
  end
219
199
 
@@ -227,7 +207,14 @@ BaseClass.new(123) # Error - can't instantiate abstract class
227
207
  Child.new(123).what_is_var # Ok - "var is 123"
228
208
  ```
229
209
 
230
- ## Usage:
210
+ ## Getting started:
211
+
212
+ **Note: This gem currently requires Crystal to be installed. If you don't wish to install it, or run into other installation problems, consider using the Docker image:**
213
+
214
+ ```dockerfile
215
+ FROM johansenja/gloss:latest
216
+ # ...
217
+ ```
231
218
 
232
219
  ```ruby
233
220
  # Gemfile
@@ -250,8 +237,18 @@ then
250
237
 
251
238
  then
252
239
 
240
+ `vi .gloss.yml # set entrypoint to src/hello_world.gl`
241
+
242
+ then
243
+
253
244
  `gloss build`
254
245
 
255
246
  then
256
247
 
257
248
  `ruby ./hello_world.rb`
249
+
250
+ ## Example Projects:
251
+
252
+ - This one! Gloss is mostly self-hosting, so check out the `./src` and `./.gloss.yml`, or the generated output in `./lib`
253
+ - [onefiveone](https://github.com/johansenja/onefiveone) - A Roman Numeral CLI. Read the accompanying article [here](https://johansenja.medium.com/ruby-crystal-pt-ii-a-simple-app-using-gloss-368ff849db67)
254
+ - More to come (including web apps)! Also check out `Used by` section in the sidebar
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 :build do
20
+ task :build_gem do
21
21
  sh "cd", "ext/gloss", "&&", "make", "all", "&&", "cd", "-"
22
22
  end
23
23
 
24
- task :default => [:spec]
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 -dynamic -Wl,-undefined,dynamic_lookup" $< -o $(TARGET) --release
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
@@ -1,8 +1,6 @@
1
1
  lib CrRuby
2
2
  # every ruby Object is a VALUE
3
3
  type VALUE = Void*
4
- # ruby method typing
5
- type METHOD_FUNC = VALUE, VALUE -> VALUE
6
4
 
7
5
  # a ruby Class is a VALUE
8
6
  $rb_cObject : VALUE
@@ -28,8 +26,11 @@ lib CrRuby
28
26
  fun rb_define_module(name: UInt8*) : VALUE
29
27
 
30
28
  # define ruby method in C
31
- fun rb_define_method(klass: VALUE, name: UInt8*, func: METHOD_FUNC, argc: Int32)
29
+ fun rb_define_method(klass: VALUE, name: UInt8*, func: Proc(CrRuby::VALUE, CrRuby::VALUE,
30
+ CrRuby::VALUE), argc: Int32)
32
31
 
33
32
  # define singleton ruby method in C
34
- fun rb_define_singleton_method(klass: VALUE, name: UInt8*, func: METHOD_FUNC, argc: Int32)
33
+ fun rb_define_singleton_method(klass: VALUE, name: UInt8*, func: Proc(CrRuby::VALUE,
34
+ CrRuby::VALUE,
35
+ CrRuby::VALUE), argc: Int32)
35
36
  end
@@ -4,7 +4,7 @@ require "./cr_ast"
4
4
  require "./rb_ast"
5
5
  require "./parser"
6
6
 
7
- def parse_string(self : CrRuby::VALUE, str : CrRuby::VALUE)
7
+ def parse_string(_self : CrRuby::VALUE, str : CrRuby::VALUE)
8
8
  st = CrRuby.rb_str_to_str(str)
9
9
  string = String.new(CrRuby.rb_string_value_cstr(pointerof(st)))
10
10
 
@@ -21,5 +21,10 @@ fun init = Init_gls
21
21
  GC.init
22
22
  LibCrystalMain.__crystal_main(0, Pointer(Pointer(UInt8)).null)
23
23
  gloss = CrRuby.rb_define_module("Gloss");
24
- CrRuby.rb_define_singleton_method(gloss, "parse_buffer", ->parse_string(CrRuby::VALUE, CrRuby::VALUE), 1);
24
+ CrRuby.rb_define_singleton_method(
25
+ gloss,
26
+ "parse_buffer",
27
+ ->parse_string(CrRuby::VALUE, CrRuby::VALUE),
28
+ 1
29
+ );
25
30
  end
data/gloss.gemspec CHANGED
@@ -17,11 +17,12 @@ 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
+ s.add_development_dependency "rufo"
27
28
  end
data/lib/gloss.rb CHANGED
@@ -1,7 +1,6 @@
1
- # frozen_string_literal: true
2
-
1
+
3
2
  ##### This file was generated by Gloss; any changes made here will be overwritten.
4
- ##### See src/ to make changes
3
+ ##### See / to make changes
5
4
 
6
5
  require "rbs"
7
6
  require "json"
@@ -22,11 +21,8 @@ require "gloss/errors"
22
21
  require "gloss/logger"
23
22
  require "gloss/prog_loader"
24
23
  require "gloss/utils"
25
- is_ci = ENV.fetch("CI") { ||
26
- false}
27
- unless is_ci
28
- require "gls"
29
- end
24
+ require "gloss/runtime"
25
+ require "gls"
30
26
  EMPTY_ARRAY = Array.new
31
27
  .freeze
32
28
  EMPTY_HASH = {}.freeze
data/lib/gloss/cli.rb CHANGED
@@ -1,7 +1,6 @@
1
- # frozen_string_literal: true
2
-
1
+
3
2
  ##### This file was generated by Gloss; any changes made here will be overwritten.
4
- ##### See src/ to make changes
3
+ ##### See / to make changes
5
4
 
6
5
  require "optparse"
7
6
  module Gloss
@@ -27,6 +26,7 @@ case command
27
26
  when "version", "--version", "-v"
28
27
  puts(Gloss::VERSION)
29
28
  when "watch", "build"
29
+ Gloss.load_config
30
30
  type_checker = ProgLoader.new
31
31
  .run
32
32
  (if command.==("watch")
data/lib/gloss/config.rb CHANGED
@@ -1,7 +1,6 @@
1
- # frozen_string_literal: true
2
-
1
+
3
2
  ##### This file was generated by Gloss; any changes made here will be overwritten.
4
- ##### See src/ to make changes
3
+ ##### See / to make changes
5
4
 
6
5
  require "ostruct"
7
6
  require "yaml"
@@ -10,14 +9,18 @@ module Gloss
10
9
  Config = OpenStruct.new(default_config: {:frozen_string_literals => true,
11
10
  :src_dir => "src",
12
11
  :entrypoint => nil,
13
- :strict_require => false}.freeze)
14
- user_config = (if File.exist?(CONFIG_PATH)
15
- YAML.safe_load(File.read(CONFIG_PATH))
16
- else
12
+ :strict_require => false,
13
+ :type_checking_strictness => "lenient",
14
+ :prettify_output_executable_path => nil}.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
- Config.send(:"#{k}=", user_config.[](k.to_s) || v)
22
- }
23
+ Config.send(:"#{k}=", user_config.[](k.to_s) || v)
24
+ }
25
+ end
23
26
  end
data/lib/gloss/errors.rb CHANGED
@@ -1,7 +1,6 @@
1
- # frozen_string_literal: true
2
-
1
+
3
2
  ##### This file was generated by Gloss; any changes made here will be overwritten.
4
- ##### See src/ to make changes
3
+ ##### See / to make changes
5
4
 
6
5
  module Gloss
7
6
  module Errors
@@ -1,7 +1,6 @@
1
- # frozen_string_literal: true
2
-
1
+
3
2
  ##### This file was generated by Gloss; any changes made here will be overwritten.
4
- ##### See src/ to make changes
3
+ ##### See / to make changes
5
4
 
6
5
  require "yaml"
7
6
  module Gloss
data/lib/gloss/logger.rb CHANGED
@@ -1,7 +1,6 @@
1
- # frozen_string_literal: true
2
-
1
+
3
2
  ##### This file was generated by Gloss; any changes made here will be overwritten.
4
- ##### See src/ to make changes
3
+ ##### See / to make changes
5
4
 
6
5
  module Gloss
7
6
  def self.logger()
@@ -24,6 +23,11 @@ nil => nil,
24
23
  else
25
24
  IO::NULL
26
25
  end))
26
+ .tap() { |l|
27
+ (if real_log_level
28
+ l.level=(real_log_level)
29
+ end)
30
+ }
27
31
  end)
28
32
  end
29
33
  end