codemodels 0.2.5-java → 0.2.6-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -7
- data/Rakefile +5 -1
- data/codemodels.gemspec +3 -2
- data/lib/codemodels/artifact.rb +54 -0
- data/lib/codemodels/comparison.rb +1 -0
- data/lib/codemodels/info_extraction.rb +1 -0
- data/lib/codemodels/language.rb +1 -0
- data/lib/codemodels/metamodel.rb +1 -0
- data/lib/codemodels/model_building.rb +1 -0
- data/lib/codemodels/monkey_patching.rb +1 -0
- data/lib/codemodels/navigation.rb +1 -0
- data/lib/codemodels/parser.rb +73 -0
- data/lib/codemodels/position.rb +2 -0
- data/lib/codemodels/serialization.rb +2 -0
- data/lib/codemodels/source_info.rb +2 -0
- data/lib/codemodels/version.rb +3 -1
- data/lib/codemodels.rb +2 -0
- data/test/data/text_iso_8859_1 +1 -0
- data/test/data/text_iso_8859_16 +0 -0
- data/test/data/text_utf16BE +0 -0
- data/test/data/text_utf16LE +0 -0
- data/test/data/text_utf8 +1 -0
- data/test/test_parser.rb +46 -0
- metadata +38 -12
- data/lib/codemodels/parsing.rb +0 -37
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f078cf79663958cdc1389096405686a03dff12fc
|
4
|
+
data.tar.gz: e7890ba70b6e10f9167feecb8ac24e8f43f7c3a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdc1e5a07416951f7c2b21467e1a4c0f5d0dd376492288204226dbe8ebea9d64bc86ed78cf270b9320d39965ba43c211294c41c037e86fc1309bcb71655d0b57
|
7
|
+
data.tar.gz: 0d70721939e39ea3be3d2a2be7b36a0c473e045c73798d213f75b9286bae3b69bae521b8f5fa096cffb6e55d6f4519324c43ce370874445e110185993671a03a
|
data/README.md
CHANGED
@@ -1,19 +1,21 @@
|
|
1
1
|
codemodels
|
2
2
|
===========
|
3
3
|
|
4
|
-
codemodels is a library to
|
4
|
+
codemodels is a library to represent and manipulate homogeneously Abstract Syntax Trees of different languages models.
|
5
5
|
|
6
|
-
It is based on [RGen](http://github.com/mthiede/rgen) and
|
6
|
+
It is based on [RGen](http://github.com/mthiede/rgen) and [RGen-Ext](https://github.com/ftomassetti/rgen_ext).
|
7
7
|
|
8
8
|
There are different gems which transform source code in models of the code. Currently they are:
|
9
|
-
* [html
|
9
|
+
* [codemodels-html](http://github.com/ftomassetti/codemodels-html)
|
10
10
|
* [codemodels-java](http://github.com/ftomassetti/codemodels-java)
|
11
|
-
* [js
|
12
|
-
* [properties
|
11
|
+
* [codemodels-js](http://github.com/ftomassetti/codemodels-js)
|
12
|
+
* [codemodels-properties](http://github.com/ftomassetti/codemodels-properties)
|
13
13
|
* [codemodels-ruby](http://github.com/ftomassetti/codemodels-ruby)
|
14
|
-
* [xml
|
14
|
+
* [codemodels-xml](http://github.com/ftomassetti/codemodels-xml)
|
15
15
|
|
16
|
-
|
16
|
+
DSLs based on EMF are planned to by supported using [emf_jruby](http://github.com/ftomassetti/emf_jruby).
|
17
|
+
|
18
|
+
Codemodels can be used to perform analysis on different languages.
|
17
19
|
|
18
20
|
Features
|
19
21
|
========
|
data/Rakefile
CHANGED
@@ -1,9 +1,13 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
2
1
|
require 'rake/testtask'
|
2
|
+
require 'rubygems/tasks'
|
3
3
|
|
4
4
|
Rake::TestTask.new do |t|
|
5
5
|
t.libs << 'test'
|
6
6
|
end
|
7
7
|
|
8
|
+
Gem::Tasks.new do |tasks|
|
9
|
+
tasks.console.command = 'jruby'
|
10
|
+
end
|
11
|
+
|
8
12
|
desc "Run tests"
|
9
13
|
task :default => :test
|
data/codemodels.gemspec
CHANGED
@@ -21,9 +21,10 @@ Gem::Specification.new do |s|
|
|
21
21
|
|
22
22
|
s.add_dependency('json')
|
23
23
|
s.add_dependency('rgen')
|
24
|
-
s.add_dependency('rgen_ext')
|
24
|
+
s.add_dependency('rgen_ext','0.0.2')
|
25
25
|
|
26
|
-
s.add_development_dependency "bundler"
|
26
|
+
s.add_development_dependency "bundler"
|
27
27
|
s.add_development_dependency "rake"
|
28
28
|
s.add_development_dependency "simplecov"
|
29
|
+
s.add_development_dependency "rubygems-tasks"
|
29
30
|
end
|
data/lib/codemodels/artifact.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
require 'codemodels/position'
|
2
3
|
|
3
4
|
module CodeModels
|
@@ -60,6 +61,10 @@ class EmbeddedArtifact < AbstractArtifact
|
|
60
61
|
@host_artifact.embedding_level+1
|
61
62
|
end
|
62
63
|
|
64
|
+
def name
|
65
|
+
'<embedded>'
|
66
|
+
end
|
67
|
+
|
63
68
|
end
|
64
69
|
|
65
70
|
class FileArtifact < AbstractArtifact
|
@@ -102,6 +107,55 @@ class FileArtifact < AbstractArtifact
|
|
102
107
|
def ==(other)
|
103
108
|
self.eql?(other)
|
104
109
|
end
|
110
|
+
|
111
|
+
def name
|
112
|
+
filename
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
class StringArtifact < AbstractArtifact
|
118
|
+
attr_reader :code
|
119
|
+
|
120
|
+
def initialize(code)
|
121
|
+
@code = code
|
122
|
+
end
|
123
|
+
|
124
|
+
def absolute_start
|
125
|
+
sp = SourcePoint.new
|
126
|
+
sp.line = 1
|
127
|
+
sp.column = 1
|
128
|
+
sp
|
129
|
+
end
|
130
|
+
|
131
|
+
def to_s
|
132
|
+
"<StringArtifact>"
|
133
|
+
end
|
134
|
+
|
135
|
+
def final_host
|
136
|
+
self
|
137
|
+
end
|
138
|
+
|
139
|
+
def embedded?
|
140
|
+
false
|
141
|
+
end
|
142
|
+
|
143
|
+
def embedding_level
|
144
|
+
0
|
145
|
+
end
|
146
|
+
|
147
|
+
def eql?(other)
|
148
|
+
return false unless other.is_a?(StringArtifact)
|
149
|
+
self.code==other.code
|
150
|
+
end
|
151
|
+
|
152
|
+
def ==(other)
|
153
|
+
self.eql?(other)
|
154
|
+
end
|
155
|
+
|
156
|
+
def name
|
157
|
+
'<string>'
|
158
|
+
end
|
105
159
|
|
106
160
|
end
|
107
161
|
|
data/lib/codemodels/language.rb
CHANGED
data/lib/codemodels/metamodel.rb
CHANGED
@@ -0,0 +1,73 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'codemodels/monkey_patching'
|
4
|
+
|
5
|
+
module CodeModels
|
6
|
+
|
7
|
+
class Parser
|
8
|
+
|
9
|
+
DEFAULT_INTERNAL_ENCODING = 'UTF-8'
|
10
|
+
|
11
|
+
attr_reader :internal_encoding
|
12
|
+
|
13
|
+
def initialize(internal_encoding=DEFAULT_INTERNAL_ENCODING)
|
14
|
+
@internal_encoding = internal_encoding
|
15
|
+
puts "WARN using an internal encoding different from the local encoding..." if "".encoding.name!=internal_encoding
|
16
|
+
end
|
17
|
+
|
18
|
+
def parse_artifact(artifact)
|
19
|
+
internal_parse_artifact(artifact)
|
20
|
+
end
|
21
|
+
|
22
|
+
def parse_file(path,file_encoding=nil)
|
23
|
+
file_encoding = internal_encoding unless file_encoding
|
24
|
+
code = IO.read(path,{ :encoding => file_encoding, :mode => 'rb'})
|
25
|
+
code = code.encode(internal_encoding)
|
26
|
+
artifact = FileArtifact.new(path,code)
|
27
|
+
internal_parse_artifact(artifact)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Deprecated: use parse_string
|
31
|
+
def parse_code(code)
|
32
|
+
parse_string(code)
|
33
|
+
end
|
34
|
+
|
35
|
+
def parse_string(code)
|
36
|
+
raise "Wrong encoding: it is #{code.encoding.name}, internally expected #{internal_encoding}" unless code.encoding.name==internal_encoding
|
37
|
+
artifact = StringArtifact.new(code)
|
38
|
+
internal_parse_artifact(artifact)
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
class ParsingError < Exception
|
44
|
+
attr_reader :node
|
45
|
+
attr_reader :line
|
46
|
+
|
47
|
+
def initialize(node,msg,line=nil)
|
48
|
+
@node = node
|
49
|
+
@msg = msg
|
50
|
+
@line = line
|
51
|
+
end
|
52
|
+
|
53
|
+
def to_s
|
54
|
+
"#{@msg}, start line: #{@line}"
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
# Most CodeModels parser are actually
|
60
|
+
# wrapping another parser and adapting it
|
61
|
+
# to CodeModels. When they encounter a node type
|
62
|
+
# they do not know how to wrap this error is thrown.
|
63
|
+
# This is not just for java based parsers, so it should
|
64
|
+
# be not moved to codemodels-javaparserwrapper
|
65
|
+
class UnknownNodeType < ParsingError
|
66
|
+
|
67
|
+
def initialize(node,line=nil,node_type=nil,where=nil)
|
68
|
+
super(node,"UnknownNodeType: type=#{node_type} , where: #{where}")
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
data/lib/codemodels/position.rb
CHANGED
data/lib/codemodels/version.rb
CHANGED
data/lib/codemodels.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
F��e laiss� fen�tre
|
Binary file
|
Binary file
|
Binary file
|
data/test/data/text_utf8
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Füße laissé fenêtre Miško Minár ă î Timișoara
|
data/test/test_parser.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'test_helper'
|
3
|
+
|
4
|
+
class TestParser < Test::Unit::TestCase
|
5
|
+
|
6
|
+
module Metamodel
|
7
|
+
|
8
|
+
class SimpleText < CodeModels::CodeModelsAstNode
|
9
|
+
has_attr 'text', String
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class SimpleTextParser < CodeModels::Parser
|
14
|
+
|
15
|
+
def internal_parse_artifact(artifact)
|
16
|
+
Metamodel::SimpleText.build(artifact.code)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_encoding
|
22
|
+
text1 = "Füße laissé fenêtre Miško Minár ă î Timișoara"
|
23
|
+
# ISO 8859-1 does not support all characters, so it is shorter
|
24
|
+
# then other examples
|
25
|
+
text2 = "Füße laissé fenêtre"
|
26
|
+
|
27
|
+
text_utf8 = SimpleTextParser.new.parse_file('test/data/text_utf8','UTF-8').text
|
28
|
+
text_utf16le = SimpleTextParser.new.parse_file('test/data/text_utf16LE','UTF-16LE').text
|
29
|
+
text_utf16be = SimpleTextParser.new.parse_file('test/data/text_utf16BE','UTF-16BE').text
|
30
|
+
text_iso8859_1 = SimpleTextParser.new.parse_file('test/data/text_iso_8859_1', 'ISO-8859-1').text
|
31
|
+
|
32
|
+
# ISO 8859 16 seems to be not fully supported in
|
33
|
+
# Ruby 1.9 and JRuby 1.7, while it is in Ruby 2.0
|
34
|
+
# This part of the test will be re-enabled later
|
35
|
+
|
36
|
+
#text_iso8859_16 = SimpleTextParser.new.parse_file('test/data/text_iso_8859_16','ISO-8859-16')
|
37
|
+
|
38
|
+
assert_equal text1,text_utf8
|
39
|
+
assert_equal text1,text_utf16le
|
40
|
+
assert_equal text1,text_utf16be
|
41
|
+
assert_equal text2,text_iso8859_1
|
42
|
+
|
43
|
+
#assert_equal text1,text_iso8859_16
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codemodels
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Federico Tomassetti
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -42,28 +42,28 @@ dependencies:
|
|
42
42
|
name: rgen_ext
|
43
43
|
version_requirements: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - '
|
45
|
+
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.0.2
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
requirements:
|
50
|
-
- - '
|
50
|
+
- - '='
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
52
|
+
version: 0.0.2
|
53
53
|
prerelease: false
|
54
54
|
type: :runtime
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
version_requirements: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - '
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: '0'
|
62
62
|
requirement: !ruby/object:Gem::Requirement
|
63
63
|
requirements:
|
64
|
-
- - '
|
64
|
+
- - '>='
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version:
|
66
|
+
version: '0'
|
67
67
|
prerelease: false
|
68
68
|
type: :development
|
69
69
|
- !ruby/object:Gem::Dependency
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
version: '0'
|
95
95
|
prerelease: false
|
96
96
|
type: :development
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubygems-tasks
|
99
|
+
version_requirements: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
requirement: !ruby/object:Gem::Requirement
|
105
|
+
requirements:
|
106
|
+
- - '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
prerelease: false
|
110
|
+
type: :development
|
97
111
|
description: Library to build models of code of different languages in a uniform way.
|
98
112
|
email: f.tomassetti@gmail.com
|
99
113
|
executables: []
|
@@ -115,12 +129,17 @@ files:
|
|
115
129
|
- lib/codemodels/model_building.rb
|
116
130
|
- lib/codemodels/monkey_patching.rb
|
117
131
|
- lib/codemodels/navigation.rb
|
118
|
-
- lib/codemodels/
|
132
|
+
- lib/codemodels/parser.rb
|
119
133
|
- lib/codemodels/position.rb
|
120
134
|
- lib/codemodels/serialization.rb
|
121
135
|
- lib/codemodels/source_info.rb
|
122
136
|
- lib/codemodels/version.rb
|
123
137
|
- test/data/node_setCompleted.json
|
138
|
+
- test/data/text_iso_8859_1
|
139
|
+
- test/data/text_iso_8859_16
|
140
|
+
- test/data/text_utf16BE
|
141
|
+
- test/data/text_utf16LE
|
142
|
+
- test/data/text_utf8
|
124
143
|
- test/test_foreign_navigation.rb
|
125
144
|
- test/test_helper.rb
|
126
145
|
- test/test_info_extraction.rb
|
@@ -128,6 +147,7 @@ files:
|
|
128
147
|
- test/test_metamodel.rb
|
129
148
|
- test/test_model_building.rb
|
130
149
|
- test/test_monkey_patching.rb
|
150
|
+
- test/test_parser.rb
|
131
151
|
- test/test_rgen_ext.rb
|
132
152
|
- test/test_serialization.rb
|
133
153
|
- test/test_source_info.rb
|
@@ -151,12 +171,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
171
|
version: '0'
|
152
172
|
requirements: []
|
153
173
|
rubyforge_project:
|
154
|
-
rubygems_version: 2.
|
174
|
+
rubygems_version: 2.2.0
|
155
175
|
signing_key:
|
156
176
|
specification_version: 4
|
157
177
|
summary: Library to build models of code
|
158
178
|
test_files:
|
159
179
|
- test/data/node_setCompleted.json
|
180
|
+
- test/data/text_iso_8859_1
|
181
|
+
- test/data/text_iso_8859_16
|
182
|
+
- test/data/text_utf16BE
|
183
|
+
- test/data/text_utf16LE
|
184
|
+
- test/data/text_utf8
|
160
185
|
- test/test_foreign_navigation.rb
|
161
186
|
- test/test_helper.rb
|
162
187
|
- test/test_info_extraction.rb
|
@@ -164,6 +189,7 @@ test_files:
|
|
164
189
|
- test/test_metamodel.rb
|
165
190
|
- test/test_model_building.rb
|
166
191
|
- test/test_monkey_patching.rb
|
192
|
+
- test/test_parser.rb
|
167
193
|
- test/test_rgen_ext.rb
|
168
194
|
- test/test_serialization.rb
|
169
195
|
- test/test_source_info.rb
|
data/lib/codemodels/parsing.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'codemodels/monkey_patching'
|
2
|
-
|
3
|
-
module CodeModels
|
4
|
-
|
5
|
-
class Parser
|
6
|
-
|
7
|
-
def parse_file(path)
|
8
|
-
parse_code(IO.read(path))
|
9
|
-
end
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
class ParsingError < Exception
|
14
|
-
attr_reader :node
|
15
|
-
attr_reader :line
|
16
|
-
|
17
|
-
def initialize(node,msg,line=nil)
|
18
|
-
@node = node
|
19
|
-
@msg = msg
|
20
|
-
@line = line
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_s
|
24
|
-
"#{@msg}, start line: #{@line}"
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
class UnknownNodeType < ParsingError
|
30
|
-
|
31
|
-
def initialize(node,line=nil,node_type=nil,where=nil)
|
32
|
-
super(node,"UnknownNodeType: type=#{node_type} , where: #{where}")
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|