roku_builder 4.8.2 → 4.9.0

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
  SHA1:
3
- metadata.gz: 7406e49f56028e7b453dced404c279af36f4619e
4
- data.tar.gz: 67cffee550e2059add97755ae247e29966a6f6ef
3
+ metadata.gz: 826bb48694fa32bff380d9ea9143772b019d3845
4
+ data.tar.gz: ab2c380e350b704fe788f04fcdab7c30655f176c
5
5
  SHA512:
6
- metadata.gz: 953875238157d4dfda237ca8c860af59ab85c205d4d6b8dbe6d79e837492daa399464e8b99778456bb52b3884f601e4c9d70b8958cd589518d89de16a5990d0e
7
- data.tar.gz: 31b36d4a0720ce67ce20c1e5e5c6d3c505ab1a1dbf2213b549e8db6383dd110da71679574d9ccd7881ce9c37a4cef177fad55c6670e75462bd3b0b9f8b635a69
6
+ metadata.gz: 24f1e3f0f88aa3bd262e48a3f83b1a38962e0c050432da73c6d230447dbc807179577ba7ceddecb1cf1aa20b05a2c13d11e0bfea85b6e8311ae506bc0527b209
7
+ data.tar.gz: 2cb77fd249b35bfa5e4b0c819f317911642944e6ee1c47120a8773617224a1c9b7bf8c63e244fd1157eb8f5f047d029f8657e106c5a184ff50d26897751fe654
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ = 4.9.0 =
2
+
3
+ - Add performance checks to --analyze command
4
+
1
5
  = 4.8.2 =
2
6
 
3
7
  - Sort --profile textures command
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- roku_builder (4.8.2)
4
+ roku_builder (4.9.0)
5
5
  faraday (~> 0.13)
6
6
  faraday-digestauth (~> 0.2)
7
7
  git (~> 1.3)
@@ -0,0 +1,12 @@
1
+ # ********** Copyright 2016 Viacom, Inc. Apache 2.0 **********
2
+
3
+ class ::Array
4
+ def any_is_start?(full_string)
5
+ each do |item|
6
+ if full_string.start_with?(item)
7
+ return true
8
+ end
9
+ end
10
+ return false
11
+ end
12
+ end
@@ -17,6 +17,10 @@ module RokuBuilder
17
17
  parser.on("--analyze", "Run a static analysis on a given stage") do
18
18
  options[:analyze] = true
19
19
  end
20
+ parser.separator "Options:"
21
+ parser.on("--inclide-libraries", "Include libraries in analyze") do
22
+ options[:include_libraries] = true
23
+ end
20
24
  end
21
25
 
22
26
  def self.dependencies
@@ -26,7 +30,9 @@ module RokuBuilder
26
30
  def analyze(options:, quiet: false)
27
31
  @options = options
28
32
  @warnings = []
29
- analyzer_config = get_analyzer_config
33
+ plugin_config = get_config(".roku_builder_analyze.json", true) || {}
34
+ analyzer_config = get_config("inspector_config.json")
35
+ performance_config = get_config("performance_config.json")
30
36
  @inspector_config = analyzer_config[:inspectors]
31
37
  loader = Loader.new(config: @config)
32
38
  Dir.mktmpdir do |dir|
@@ -35,16 +41,23 @@ module RokuBuilder
35
41
  manifest_inspector = ManifestInspector.new(config: @config, dir: dir, raf: raf_inspector)
36
42
  @warnings.concat(manifest_inspector.run(analyzer_config[:inspectors]))
37
43
  has_source_dir = false
44
+ libraries = plugin_config[:libraries]
45
+ libraries ||= []
38
46
  Dir.glob(File.join(dir, "**", "*")).each do |file_path|
39
- if File.file?(file_path) and file_path.end_with?(".brs", ".xml")
40
- line_inspector = LineInspector.new(config: @config, raf: raf_inspector, inspector_config: analyzer_config[:lineInspectors])
41
- @warnings.concat(line_inspector.run(file_path))
42
- end
43
- if file_path.end_with?("__MACOSX")
44
- add_warning(warning: :packageMacosxDirectory, path: file_path)
45
- end
46
- if file_path.end_with?(".zip", ".md", ".pkg")
47
- add_warning(warning: :packageExtraneousFiles, path: file_path)
47
+ file = file_path.dup; file.slice!(dir)
48
+ unless libraries.any_is_start?(file) and not @options[:include_libraries]
49
+ if File.file?(file_path) and file_path.end_with?(".brs", ".xml")
50
+ line_inspector_config = analyzer_config[:lineInspectors]
51
+ line_inspector_config += performance_config
52
+ line_inspector = LineInspector.new(config: @config, raf: raf_inspector, inspector_config: line_inspector_config)
53
+ @warnings.concat(line_inspector.run(file_path))
54
+ end
55
+ if file_path.end_with?("__MACOSX")
56
+ add_warning(warning: :packageMacosxDirectory, path: file_path)
57
+ end
58
+ if file_path.end_with?(".zip", ".md", ".pkg")
59
+ add_warning(warning: :packageExtraneousFiles, path: file_path)
60
+ end
48
61
  end
49
62
  has_source_dir = true if file_path.end_with?("source")
50
63
  end
@@ -59,12 +72,13 @@ module RokuBuilder
59
72
 
60
73
  private
61
74
 
62
- def get_analyzer_config
63
- #url = "http://devtools.web.roku.com/static-code-analyzer/config.json"
64
- #url = @options[:analyze_config] if @options[:analyze_config]
65
- #JSON.parse(Faraday.get(url).body, {symbolize_names: true})
66
- file = File.join(File.dirname(__FILE__), "inspector_config.json")
67
- JSON.parse(File.open(file).read, {symbolize_names: true})
75
+ def get_config(file, project_root=false)
76
+ if project_root
77
+ file = File.join(@config.root_dir, file)
78
+ else
79
+ file = File.join(File.dirname(__FILE__), file)
80
+ end
81
+ JSON.parse(File.open(file).read, {symbolize_names: true}) if File.exist? file
68
82
  end
69
83
 
70
84
  def add_warning(warning:, path:)
@@ -15,6 +15,7 @@ module RokuBuilder
15
15
  line_number = 0
16
16
  in_xml_comment = false
17
17
  file.readlines.each do |line|
18
+ full_line = line.dup
18
19
  line = line.partition("'").first if file_path.end_with?(".brs")
19
20
  if file_path.end_with?(".xml")
20
21
  if in_xml_comment
@@ -28,8 +29,10 @@ module RokuBuilder
28
29
  in_xml_comment = true if line.gsub!(/<!--.*/, "")
29
30
  end
30
31
  @inspector_config.each do |line_inspector|
31
- if /#{line_inspector[:regex]}/.match(line)
32
- add_warning(inspector: line_inspector, file: file_path, line: line_number)
32
+ if /#{line_inspector[:regex]}/i.match(line)
33
+ unless /'.*ignore-warning/i.match(full_line)
34
+ add_warning(inspector: line_inspector, file: file_path, line: line_number)
35
+ end
33
36
  end
34
37
  end
35
38
  @raf_inspector.inspect_line(line: line, file: file_path, line_number: line_number)
@@ -0,0 +1,27 @@
1
+ [
2
+ {
3
+ "regex": "\\sas\\s(Object|Boolean|String|Integer|LongInteger|Double|Float|Function|Dynamic)",
4
+ "severity": "warning",
5
+ "message": "Found function return type. Consider removing"
6
+ } ,
7
+ {
8
+ "regex": "DoesExist",
9
+ "severity": "warning",
10
+ "message": "Found DoesExist check. Try using invalid check on dot referance"
11
+ },
12
+ {
13
+ "regex": "\\[\"[^\"]+\"\\]",
14
+ "severity": "warning",
15
+ "message": "Found AA String referance. Try switching to dot referance"
16
+ },
17
+ {
18
+ "regex": "FOR.*TO",
19
+ "severity": "warning",
20
+ "message": "For loop found. Try switching to a For Each loop"
21
+ },
22
+ {
23
+ "regex": "\"roRegex\"",
24
+ "severity": "warning",
25
+ "message": "Regexp found. Avoid if possible"
26
+ }
27
+ ]
@@ -2,5 +2,5 @@
2
2
 
3
3
  module RokuBuilder
4
4
  # Version of the RokuBuilder Gem
5
- VERSION = "4.8.2"
5
+ VERSION = "4.9.0"
6
6
  end
@@ -9,7 +9,7 @@ module RokuBuilder
9
9
  RokuBuilder.class_variable_set(:@@dev, false)
10
10
  RokuBuilder.setup_plugins
11
11
  register_plugins(Analyzer)
12
- @config, @options = build_config_options_objects(AnalyzerTest, {analyze: true, working: true, quiet_analyze: true}, false)
12
+ @config, @options = build_config_options_objects(AnalyzerTest, {analyze: true, working: true}, false)
13
13
  @root_dir = @config.root_dir
14
14
  @device_config = @config.device_config
15
15
  FileUtils.cp(File.join(@root_dir, "manifest_template"), File.join(@root_dir, "manifest"))
@@ -26,6 +26,7 @@ module RokuBuilder
26
26
  def teardown
27
27
  manifest = File.join(@root_dir, "manifest")
28
28
  FileUtils.rm(manifest) if File.exist?(manifest)
29
+ remove_config
29
30
  @request_stubs.each {|req| remove_request_stub(req)}
30
31
  end
31
32
  def test_analyzer_parse_commands
@@ -252,7 +253,7 @@ module RokuBuilder
252
253
  def test_macosx_directory
253
254
  config = good_config(AnalyzerTest)
254
255
  config[:projects][:project1][:folders].push("Test__MACOSX")
255
- @config, @options = build_config_options_objects(AnalyzerTest, {analyze: true, working: true, quiet_analyze: true}, false, config)
256
+ @config, @options = build_config_options_objects(AnalyzerTest, {analyze: true, working: true}, false, config)
256
257
  folder = File.join(@root_dir, "Test__MACOSX")
257
258
  Dir.mkdir(folder) unless File.exist?(folder)
258
259
  warnings = test
@@ -297,6 +298,70 @@ module RokuBuilder
297
298
  def test_logging_info
298
299
  test_logger_with_file_content(text: "\"roSGScreen\"", severity: :info)
299
300
  end
301
+ def test_performance_function_return_types
302
+ warnings = test_file(text: "function test() as String\n? \"test\"\nend function")
303
+ assert_equal 1, warnings.count
304
+ assert_match(/function return/, warnings[0][:message])
305
+ end
306
+ def test_performance_function_return_types_lowercase
307
+ warnings = test_file(text: "function test() as string\n? \"test\"\nend function")
308
+ assert_equal 1, warnings.count
309
+ assert_match(/function return/, warnings[0][:message])
310
+ end
311
+ def test_performance_aa_does_exist
312
+ warnings = test_file(text: "exists = aa.doesExist(\"test\")")
313
+ assert_equal 1, warnings.count
314
+ assert_match(/DoesExist check/, warnings[0][:message])
315
+ end
316
+ def test_performance_aa_string_ref
317
+ warnings = test_file(text: "aa[\"test\"] = \"test\"")
318
+ assert_equal 1, warnings.count
319
+ assert_match(/String referance/, warnings[0][:message])
320
+ end
321
+ def test_performance_for_loop
322
+ warnings = test_file(text: "FOR i=0 TO 10\n ? i\nEND FOR")
323
+ assert_equal 1, warnings.count
324
+ assert_match(/For loop found/, warnings[0][:message])
325
+ end
326
+ def test_performance_for_loop_lower_case
327
+ warnings = test_file(text: "for i=0 to 10\n ? i\nEND FOR")
328
+ assert_equal 1, warnings.count
329
+ assert_match(/For loop found/, warnings[0][:message])
330
+ end
331
+ def test_performance_for_loop_title_case
332
+ warnings = test_file(text: "For i=0 To 10\n ? i\nEND FOR")
333
+ assert_equal 1, warnings.count
334
+ assert_match(/For loop found/, warnings[0][:message])
335
+ end
336
+ def test_performance_regex
337
+ warnings = test_file(text: "\"roRegex\"")
338
+ assert_equal 1, warnings.count
339
+ assert_match(/Regexp found/, warnings[0][:message])
340
+ end
341
+ def test_library_skip
342
+ set_config({libraries: ["/source/test.brs"]})
343
+ warnings = test_file(text: "\"roRegex\"")
344
+ assert_equal 0, warnings.count
345
+ end
346
+ def test_library_skip_folder
347
+ set_config({libraries: ["/source"]})
348
+ warnings = test_file(text: "\"roRegex\"")
349
+ assert_equal 0, warnings.count
350
+ end
351
+ def test_library_include
352
+ @config, @options = build_config_options_objects(AnalyzerTest, {analyze: true, working: true, include_libraries: true}, false)
353
+ set_config({libraries: ["/source/test.brs"]})
354
+ warnings = test_file(text: "\"roRegex\"")
355
+ assert_equal 1, warnings.count
356
+ end
357
+ def test_performance_skip_warning_comment
358
+ warnings = test_file(text: "function test() as String 'ignore-warning\n? \"test\"\nend function")
359
+ assert_equal 0, warnings.count
360
+ end
361
+ def test_performance_skip_warning_comment_upper_case
362
+ warnings = test_file(text: "function test() as String 'IGNORE-WARNING\n? \"test\"\nend function")
363
+ assert_equal 0, warnings.count
364
+ end
300
365
 
301
366
 
302
367
  private
@@ -342,6 +407,19 @@ module RokuBuilder
342
407
  analyzer.analyze(options: @options, quiet: quiet)
343
408
  end
344
409
 
410
+ def set_config(config_content)
411
+ config = File.join(@root_dir, ".roku_builder_analyze.json")
412
+ File.open(config, "w") do |file|
413
+ file.write(config_content.to_json)
414
+ end
415
+ end
416
+
417
+ def remove_config
418
+ config = File.join(@root_dir, ".roku_builder_analyze.json")
419
+ FileUtils.rm(config) if File.exist? config
420
+ end
421
+
422
+
345
423
  def print_all(warnings)
346
424
  warnings.each do |warning|
347
425
  puts warning[:message]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roku_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.8.2
4
+ version: 4.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - greeneca
@@ -474,6 +474,7 @@ files:
474
474
  - intergration/roku_builder/test_scripter.rb
475
475
  - intergration/roku_builder/test_tester.rb
476
476
  - lib/roku_builder.rb
477
+ - lib/roku_builder/array.rb
477
478
  - lib/roku_builder/config.rb
478
479
  - lib/roku_builder/config_parser.rb
479
480
  - lib/roku_builder/config_validator.rb
@@ -496,6 +497,7 @@ files:
496
497
  - lib/roku_builder/plugins/monitor.rb
497
498
  - lib/roku_builder/plugins/navigator.rb
498
499
  - lib/roku_builder/plugins/packager.rb
500
+ - lib/roku_builder/plugins/performance_config.json
499
501
  - lib/roku_builder/plugins/profiler.rb
500
502
  - lib/roku_builder/plugins/raf_inspector.rb
501
503
  - lib/roku_builder/plugins/scripter.rb