Branch: refs/heads/master Author: Colomban Wendling ban@herbesfolles.org Committer: Colomban Wendling ban@herbesfolles.org Date: Wed, 02 Apr 2014 17:56:24 UTC Commit: e94d162d300adb465bcc7dcd41bc8c584c3eec61 https://github.com/geany/geany/commit/e94d162d300adb465bcc7dcd41bc8c584c3eec...
Log Message: ----------- Merge branch 'SiegeLord/rust_updates'
Modified Paths: -------------- data/filetypes.rust tagmanager/ctags/rust.c tests/ctags/test_input.rs tests/ctags/test_input.rs.tags tests/ctags/test_input2.rs
Modified: data/filetypes.rust 2 files changed, 1 insertions(+), 1 deletions(-) =================================================================== @@ -22,7 +22,7 @@ lexerror=error
[keywords] # all items must be in one line -primary=alignof as be box break const continue do else enum extern false fn for if impl in let __log_level loop match mod mut offsetof once priv proc pub pure ref return self sizeof static struct super trait true type typeof unsafe unsized use while yield +primary=alignof as be box break const continue crate do else enum extern false fn for if impl in let loop match mod mut offsetof once priv proc pub pure ref return self sizeof static struct super trait true type typeof unsafe unsized use while yield secondary=bool char f32 f64 i16 i32 i64 i8 int str u16 u32 u64 u8 uint tertiary=Self
Modified: tagmanager/ctags/rust.c 61 files changed, 47 insertions(+), 14 deletions(-) =================================================================== @@ -67,6 +67,7 @@ TOKEN_IDENT, TOKEN_LSHIFT, TOKEN_RSHIFT, + TOKEN_RARROW, TOKEN_EOF } tokenType;
@@ -129,6 +130,9 @@ static void writeCurTokenToStr (lexerState *lexer, vString *out_str) case TOKEN_RSHIFT: vStringCatS(out_str, ">>"); break; + case TOKEN_RARROW: + vStringCatS(out_str, "->"); + break; default: vStringPut(out_str, (char) lexer->cur_token); } @@ -356,6 +360,11 @@ static int advanceToken (lexerState *lexer, boolean skip_whitspace) advanceNChar(lexer, 2); return lexer->cur_token = TOKEN_LSHIFT; } + else if (lexer->cur_c == '-' && lexer->next_c == '>') + { + advanceNChar(lexer, 2); + return lexer->cur_token = TOKEN_RARROW; + } else { int c = lexer->cur_c; @@ -706,10 +715,31 @@ static void parseStructOrEnum (lexerState *lexer, vString *scope, int parent_kin vString *field_name = vStringNew(); while (lexer->cur_token != TOKEN_EOF) { + int goal_tokens2[] = {'}', ','}; + /* Skip attributes. Format: + * #[..] or #![..] + * */ + if (lexer->cur_token == '#') + { + advanceToken(lexer, TRUE); + if (lexer->cur_token == '!') + advanceToken(lexer, TRUE); + if (lexer->cur_token == '[') + { + /* It's an attribute, skip it. */ + skipUntil(lexer, NULL, 0); + } + else + { + /* Something's up with this field, skip to the next one */ + skipUntil(lexer, goal_tokens2, 2); + continue; + } + } if (lexer->cur_token == TOKEN_IDENT) { - int goal_tokens2[] = {'}', ','}; - if (strcmp(lexer->token_str->buffer, "priv") == 0) + if (strcmp(lexer->token_str->buffer, "priv") == 0 + || strcmp(lexer->token_str->buffer, "pub") == 0) { advanceToken(lexer, TRUE); if (lexer->cur_token != TOKEN_IDENT) @@ -746,19 +776,22 @@ static void skipMacro (lexerState *lexer) int minus_token = 0;
advanceToken(lexer, TRUE); - if (lexer->cur_token == '(') - { - plus_token = '('; - minus_token = ')'; - } - else if (lexer->cur_token == '{') - { - plus_token = '{'; - minus_token = '}'; - } - else + switch (lexer->cur_token) { - return; + case '(': + plus_token = '('; + minus_token = ')'; + break; + case '{': + plus_token = '{'; + minus_token = '}'; + break; + case '[': + plus_token = '['; + minus_token = ']'; + break; + default: + return; }
while (lexer->cur_token != TOKEN_EOF)
Modified: tests/ctags/test_input.rs 29 files changed, 27 insertions(+), 2 deletions(-) =================================================================== @@ -2,9 +2,23 @@ #[feature(globs)]; #[feature(macro_rules)]; use std::*; +use std::io::stdio::println; use test_input2::*; mod test_input2;
+pub struct A +{ + foo: fn() -> int, + bar: int +} + +pub struct B +{ + #[cfg(test)] + foo: int, + bar: int +} + /* * fn ignored_in_comment() {} */ @@ -18,8 +32,9 @@ mod test_input2;
static size: uint = 1;
+#[cfg(test)] struct S1 { - only_field: [int, ..size] + priv only_field: [int, ..size] }
macro_rules! test_macro @@ -27,6 +42,8 @@ macro_rules! test_macro () => {1} }
+macro_rules! ignore (($($x:tt)*) => (())) + fn yada(a:int,c:Foo,b:test_input2::fruit::SomeStruct) -> ~str { a.to_str() } @@ -43,6 +60,14 @@ fn main() { ( fn ignored_inside_macro() {} ) + ignore! + [ + fn ignored_inside_macro() {} + ] + ignore! + { + fn ignored_inside_macro() {} + }
let _ = "fn ignored_in_string() {} "; @@ -64,7 +89,7 @@ struct Foo2 { }
impl Foo { - fn my_method(&self,_:int){ print("my_method of foo");} + fn my_method(&self,_:int){ println("my_method of foo");} }
enum Animal {
Modified: tests/ctags/test_input.rs.tags 7 files changed, 7 insertions(+), 0 deletions(-) =================================================================== @@ -1,5 +1,7 @@ # format=tagmanager +AÌ2048Ö0 AnimalÌ2Ö0 +BÌ2048Ö0 BarÌ2048Ö0 BazÌ2048Ö0 DoZÌ32Ö0 @@ -16,10 +18,15 @@ a_anteater a_bearÌ4ÎAnimalÖ0 a_catÌ4ÎAnimalÖ0 a_dogÌ4ÎAnimalÖ0 +barÌ8ÎAÖ0 +barÌ8ÎBÖ0 do_zÌ128Í(&self)ÎDoZÖ0 do_zÌ128Í(&self)ÎFooÖ0 +fooÌ8ÎAÖ0 +fooÌ8ÎBÖ0 foo_field_1Ì8ÎFooÖ0 gfuncÌ16Í<X:Testable+DoZ>(x:&X)Ö0 +ignoreÌ65536Ö0 mainÌ16Í()Ö0 my_methodÌ128Í(&self,_:int)ÎFooÖ0 nestedÌ16Í()ÎmainÖ0
Modified: tests/ctags/test_input2.rs 6 files changed, 5 insertions(+), 1 deletions(-) =================================================================== @@ -1,3 +1,5 @@ +use std::io::stdio::println; + pub fn foo_bar_test_func(apples:fruit::SomeStruct,(oranges,lemon):(int,int))->int{ let some_var_name=2*oranges; let a=SomeLongStructName{v:0}; @@ -8,7 +10,9 @@ pub fn foo_bar_test_func(apples:fruit::SomeStruct,(oranges,lemon):(int,int))->in
pub mod fruit { pub struct SomeStruct{ - red_value:int,green_value:int,blue_value:int + pub red_value: int, + pub green_value: int, + pub blue_value: int } }
-------------- This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).