@@ -7,24 +7,21 @@ use anyhow::Result;
7
7
use once_cell:: sync:: Lazy ;
8
8
9
9
static GITHUB : Lazy < Regex > = Lazy :: new ( || {
10
- Regex :: new ( r"https?://github\.com/(?P<repo>[\w-]+/[\w.-]+)/blob/(?P<ref>.+?)/(?P<file>.*\.(?:(?P<language>\w+))? )#L(?P<start>\d+)(?:[~-]L?(?P<end>\d+)?)?" ) . unwrap ( )
10
+ Regex :: new ( r"https?://github\.com/(?P<repo>[\w-]+/[\w.-]+)/blob/(?P<ref>.+?)/(?P<file>.*)#L(?P<start>\d+)(?:[~-]L?(?P<end>\d+)?)?" ) . unwrap ( )
11
11
} ) ;
12
12
13
13
pub async fn handle ( message : & serenity:: Message , ctx : & serenity:: Context ) -> Result < ( ) > {
14
14
let message = message. clone ( ) ;
15
15
let mut embeds: Vec < serenity:: CreateEmbed > = vec ! [ ] ;
16
16
17
17
for captures in GITHUB . captures_iter ( & message. content ) {
18
- let repo = & captures[ "repo" ] ;
19
- let ref_ = & captures[ "ref" ] ;
20
- let file = & captures[ "file" ] ;
18
+ let repo = captures[ "repo" ] . to_owned ( ) ;
19
+ let ref_ = captures[ "ref" ] . to_owned ( ) ;
20
+ let file = captures[ "file" ] . to_owned ( ) ;
21
21
22
- let language = match captures. name ( "language" ) {
23
- Some ( m) => m. as_str ( ) . to_owned ( ) ,
24
- None => "" . to_owned ( ) ,
25
- } ;
22
+ let language = file. split ( '.' ) . last ( ) . unwrap_or ( "" ) . to_owned ( ) ;
26
23
27
- let start = & captures[ "start" ] . parse :: < usize > ( ) ?;
24
+ let start = captures[ "start" ] . parse :: < usize > ( ) ?;
28
25
let end = captures
29
26
. name ( "end" )
30
27
. and_then ( |end| end. as_str ( ) . parse :: < usize > ( ) . ok ( ) ) ;
@@ -46,7 +43,7 @@ pub async fn handle(message: &serenity::Message, ctx: &serenity::Context) -> Res
46
43
let idx_start = start - 1 ;
47
44
let idx_end = match end {
48
45
Some ( end) => end,
49
- None => lines . len ( ) ,
46
+ None => start ,
50
47
} ;
51
48
let selected_lines = & lines[ idx_start..idx_end] ;
52
49
0 commit comments