From c9a1159a2ef57ef5adb12c70ee3c9e157e4111a9 Mon Sep 17 00:00:00 2001 From: Chris Zwicker Date: Sat, 7 Mar 2015 08:51:16 +0000 Subject: [PATCH 1/4] Add .plsql as extension for PL/SQL --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 691c62c8..2a766fd6 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2212,6 +2212,7 @@ PLSQL: - .pks - .plb - .sql + - .plsql #Postgres PLpgSQL: From 0db133ffb2b9841ba737329ce1a169954fe283b1 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sat, 14 Mar 2015 19:43:17 +0100 Subject: [PATCH 2/4] Detect Cython generated files --- lib/linguist/generated.rb | 13 +++++++++++++ test/test_blob.rb | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/lib/linguist/generated.rb b/lib/linguist/generated.rb index b93f7ea6..4a67fabd 100644 --- a/lib/linguist/generated.rb +++ b/lib/linguist/generated.rb @@ -62,6 +62,7 @@ module Linguist generated_parser? || generated_net_docfile? || generated_postscript? || + compiled_cython_file? || generated_protocol_buffer_go? || generated_protocol_buffer? || generated_jni_header? || @@ -270,5 +271,17 @@ module Linguist # VCR Cassettes have "recorded_with: VCR" in the second last line. return lines[-2].include?("recorded_with: VCR") end + + # Internal: Is this a compiled C/C++ file from Cython? + # + # Cython-compiled C/C++ files typically contain: + # /* Generated by Cython x.x.x on ... */ + # on the first line. + # + # Return true or false + def compiled_cython_file? + return false unless ['.c', '.cpp'].include? extname + return lines[0].include?("Generated by Cython") + end end end diff --git a/test/test_blob.rb b/test/test_blob.rb index 7c8fddc1..cc4243ea 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -240,6 +240,10 @@ class TestBlob < Minitest::Test # Godep saved dependencies assert sample_blob("Godeps/Godeps.json").generated? assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").generated? + + # Cython-generated C/C++ + assert sample_blob("C/sgd_fast.c").generated? + assert sample_blob("C++/wrapper_inner.cpp").generated? end def test_vendored From fb709e2e1090534f2d5e5020e61f12a7786141dd Mon Sep 17 00:00:00 2001 From: Chris Zwicker Date: Sat, 14 Mar 2015 19:59:25 +0000 Subject: [PATCH 3/4] Add sample file for .plsql extension --- samples/PLSQL/prime#.plsql | 93 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 samples/PLSQL/prime#.plsql diff --git a/samples/PLSQL/prime#.plsql b/samples/PLSQL/prime#.plsql new file mode 100644 index 00000000..1a4785a1 --- /dev/null +++ b/samples/PLSQL/prime#.plsql @@ -0,0 +1,93 @@ +create or replace package prime# +is + invalid_argument_error exception; + + function nth ( + i_num pls_integer + ) return number; +end prime#; +/ + +create or replace package body prime# +is + type t_primes is table of number index by pls_integer; + b_primes t_primes; + + function is_prime( + i_candidate number + ) return boolean + is + l_num number := 1; + l_prime number; + l_result number; + begin + if i_candidate < 2 then + return false; + end if; + + loop + l_prime := nth(l_num); + if l_prime = i_candidate then + return true; + end if; + + l_result := i_candidate / l_prime; + if l_result = ceil(l_result) then + return false; + end if; + + l_num := l_num + 1; + exit when l_result <= l_prime; + end loop; + + return true; + end is_prime; + + function next ( + i_prime pls_integer + ) return number + is + l_next number; + begin + l_next := i_prime + case mod(i_prime, 2) when 0 then 1 else 2 end; + + while not is_prime(l_next) loop + l_next := l_next + 2; + end loop; + return l_next; + end next; + + function nth ( + i_num pls_integer + ) return number + is + l_index number := 2; + l_prime number := 3; + begin + if i_num < 1 + or ceil(i_num) != i_num + then + raise invalid_argument_error; + end if; + + case i_num + when 1 then return 2; + else + if b_primes.exists(i_num) then + return b_primes(i_num); + end if; + while l_index < i_num loop + l_index := l_index + 1; + if b_primes.exists(l_index) then + l_prime := b_primes(l_index); + else + l_prime := next(l_prime); + b_primes(l_index) := l_prime; + end if; + end loop; + return l_prime; + end case; + end nth; + +end prime#; +/ \ No newline at end of file From 03b43a85c8c1ed4f7a3418f38a27657c2409c414 Mon Sep 17 00:00:00 2001 From: Chris Zwicker Date: Sat, 14 Mar 2015 20:16:31 +0000 Subject: [PATCH 4/4] Change sorting of extensions to fix failing test --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index b7da258f..4d6404f7 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2213,8 +2213,8 @@ PLSQL: - .pkb - .pks - .plb - - .sql - .plsql + - .sql #Postgres PLpgSQL: