From aaa14cfca6ff9474157eb421a231cd01df0a2e21 Mon Sep 17 00:00:00 2001 From: Gus Prevas Date: Thu, 4 Aug 2011 20:50:29 -0400 Subject: [PATCH] add detection for Gosu --- lib/linguist/languages.yml | 10 ++++ test/fixtures/Hello.gst | 7 +++ test/fixtures/Hello.gsx | 9 ++++ test/fixtures/Person.gs | 106 +++++++++++++++++++++++++++++++++++++ test/fixtures/hello.gsp | 1 + test/fixtures/hello.vark | 3 ++ test/test_blob.rb | 7 +++ 7 files changed, 143 insertions(+) create mode 100644 test/fixtures/Hello.gst create mode 100644 test/fixtures/Hello.gsx create mode 100644 test/fixtures/Person.gs create mode 100644 test/fixtures/hello.gsp create mode 100644 test/fixtures/hello.vark diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index cc40cca0..45c480d7 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -346,6 +346,16 @@ Go: type: programming extensions: - .go + +Gosu: + type: programming + primary_extension: .gs + extensions: + - .gs + - .gsx + - .gsp + - .gst + - .vark Groff: primary_extension: .man diff --git a/test/fixtures/Hello.gst b/test/fixtures/Hello.gst new file mode 100644 index 00000000..6addbf76 --- /dev/null +++ b/test/fixtures/Hello.gst @@ -0,0 +1,7 @@ +<%!-- defined in Hello.gst --%> + +<%@ params( users : Collection ) %> + +<% for( user in users ) { %> + +${user.LastName}, ${user.FirstName}, ${user.Department} <% } %> \ No newline at end of file diff --git a/test/fixtures/Hello.gsx b/test/fixtures/Hello.gsx new file mode 100644 index 00000000..2f850e9e --- /dev/null +++ b/test/fixtures/Hello.gsx @@ -0,0 +1,9 @@ +package example + +enhancement Hello : String { + + function toPerson() : Person { + var vals = this.split(",") + return new Person( vals[0], vals[1] as int, Relationship.valueOf( vals[2] ) ) ) + } +} \ No newline at end of file diff --git a/test/fixtures/Person.gs b/test/fixtures/Person.gs new file mode 100644 index 00000000..eb8372d6 --- /dev/null +++ b/test/fixtures/Person.gs @@ -0,0 +1,106 @@ +package example + +uses java.util.* + +uses java.io.File + +class Person extends Contact implements IEmailable { + + var _name : String + var _age : Integer as Age + var _relationship : Relationship as readonly RelationshipOfPerson + + delegate _emailHelper represents IEmailable + + enum Relationship { + FRIEND, + FAMILY, + BUSINESS_CONTACT + } + + // Map of names to people + static var ALL_PEOPLE = new HashMap() + + /* Constructs a new Person */ + construct( name : String, age : Integer, relationship : Relationship ) { + _name = name + _age = age + _relationship = relationship + _emailHelper = new EmailHelper( this ) + } + + property get Name():String{ + return _name + } + + property set Name(name : String){ + _name = name + } + + /* Implement IEmailable#getEmailName() */ + override function getEmailName():String{ + return Name + } + + function incrementAge() { + _age++ + } + + @Deprecated + function printPersonInfo() { + print( "Person { Name : ${Name}, Age : ${Age}, Relationship : ${RelationshipOfPerson} }" ) + } + + static function addPerson(p : Person){ + if(ALL_PEOPLE.containsKey(p?.Name)) { + throw new IllegalArgumentException( "There is already someone named '${p.Name}'." ) + } + ALL_PEOPLE[p.Name] = p + } + + static function addAllPeople( contacts : List ) { + for( contact in contacts ) { + if( contact typeis Person and not ALL_PEOPLE.containsKey( contact.Name )) { + addPerson( contact ) + } + } + } + + static function getAllPeopleOlderThanNOrderedByName( age : int ) { + var allPeople = ALL_PEOPLE.Values + + return allPeople.where( \ p -> p.Age > age ).orderBy( \ p -> p.Name ) + } + + static function loadPersonFromDB( id : Integer ) { + using( var conn = DBConnectionManager.getConnection(), + var stmt = conn.prepareStatement( "SELECT name, age, relationship FROM PEOPLE WHERE ID=?") ){ + + stmt.setInt( 0, 0 ) + var result = stmt.executeQuery() + if( result.next() ) { + addPerson( new Person( result.getString( "name" ), + result.getInt( "age" ), + Relationship.valueOf( result.getString( "relationship" ) ) ) ) + + } + } + } + + /* Loads in people from a CSV */ + static function loadFromFile( file : File ) { + file.eachLine( \ line -> { + if( line.HasContent ) { + addPerson( line.toPerson() ) + } + }) + } + + /* Save people to a CSV */ + static function saveToFile( file : File ) { + using( var writer = new FileWriter( file ) ) { + print( PersonCSVTemplate.renderToString( ALL_PEOPLE.Values ) ) + PersonCSVTemplate.render( writer, ALL_PEOPLE.Values ) + } + } +} \ No newline at end of file diff --git a/test/fixtures/hello.gsp b/test/fixtures/hello.gsp new file mode 100644 index 00000000..ce47b771 --- /dev/null +++ b/test/fixtures/hello.gsp @@ -0,0 +1 @@ +print("hello") \ No newline at end of file diff --git a/test/fixtures/hello.vark b/test/fixtures/hello.vark new file mode 100644 index 00000000..3fc6934a --- /dev/null +++ b/test/fixtures/hello.vark @@ -0,0 +1,3 @@ +function hello() { + print("hello") +} \ No newline at end of file diff --git a/test/test_blob.rb b/test/test_blob.rb index 4fd0ae12..d803a4d1 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -324,6 +324,13 @@ class TestBlob < Test::Unit::TestCase # https://github.com/parrot/parrot assert_equal Language['Parrot Internal Representation'], blob("hello.pir").language assert_equal Language['Parrot Assembly'], blob("hello.pasm").language + + # http://gosu-lang.org + assert_equal Language['Gosu'], blob("Hello.gs").language + assert_equal Language['Gosu'], blob("Hello.gsx").language + assert_equal Language['Gosu'], blob("hello.gsp").language + assert_equal Language['Gosu'], blob("Hello.gst").language + assert_equal Language['Gosu'], blob("hello.vark").language end def test_lexer