@@ -32,7 +32,7 @@ fn ast_parser(item: web::Json<AstPayload>, _req: HttpRequest) -> HttpResponse {
3232 span : payload. span ,
3333 } ;
3434 let buf = payload. code . into_bytes ( ) ;
35- let language = guess_language ( & buf) . unwrap_or ( language) ;
35+ let language = guess_language ( & buf) . 0 . unwrap_or ( language) ;
3636
3737 // TODO: the 4th arg should be preproc data
3838 HttpResponse :: Ok ( ) . json ( action :: < AstCallback > (
@@ -56,7 +56,7 @@ fn comment_removal_json(item: web::Json<WebCommentPayload>, _req: HttpRequest) -
5656 if let Some ( language) = language {
5757 let cfg = WebCommentCfg { id : payload. id } ;
5858 let buf = payload. code . into_bytes ( ) ;
59- let language = guess_language ( & buf) . unwrap_or ( language) ;
59+ let language = guess_language ( & buf) . 0 . unwrap_or ( language) ;
6060 let language = if language == LANG :: Cpp {
6161 LANG :: Ccomment
6262 } else {
@@ -81,7 +81,7 @@ fn comment_removal_plain(code: Bytes, info: Query<WebCommentInfo>) -> HttpRespon
8181 let language = get_language_for_file ( & PathBuf :: from ( & info. file_name ) ) ;
8282 if let Some ( language) = language {
8383 let buf = code. to_vec ( ) ;
84- let language = guess_language ( & buf) . unwrap_or ( language) ;
84+ let language = guess_language ( & buf) . 0 . unwrap_or ( language) ;
8585 let cfg = WebCommentCfg { id : "" . to_string ( ) } ;
8686 let res = action :: < WebCommentCallback > ( & language, buf, & PathBuf :: from ( "" ) , None , cfg) ;
8787 if let Some ( res_code) = res. code {
@@ -105,13 +105,15 @@ fn metrics_json(item: web::Json<WebMetricsPayload>, _req: HttpRequest) -> HttpRe
105105 let language = get_language_for_file ( & path) ;
106106 let payload = item. into_inner ( ) ;
107107 if let Some ( language) = language {
108+ let buf = payload. code . into_bytes ( ) ;
109+ let ( guessed_language, guessed_name) = guess_language ( & buf) ;
110+ let language = guessed_language. unwrap_or ( language) ;
108111 let cfg = WebMetricsCfg {
109112 id : payload. id ,
110113 path,
111114 unit : payload. unit ,
115+ guessed_language : guessed_name,
112116 } ;
113- let buf = payload. code . into_bytes ( ) ;
114- let language = guess_language ( & buf) . unwrap_or ( language) ;
115117 HttpResponse :: Ok ( ) . json ( action :: < WebMetricsCallback > (
116118 & language,
117119 buf,
@@ -132,14 +134,16 @@ fn metrics_plain(code: Bytes, info: Query<WebMetricsInfo>) -> HttpResponse {
132134 let language = get_language_for_file ( & path) ;
133135 if let Some ( language) = language {
134136 let buf = code. to_vec ( ) ;
135- let language = guess_language ( & buf) . unwrap_or ( language) ;
137+ let ( guessed_language, guessed_name) = guess_language ( & buf) ;
138+ let language = guessed_language. unwrap_or ( language) ;
136139 let cfg = WebMetricsCfg {
137140 id : "" . to_string ( ) ,
138141 path,
139142 unit : info
140143 . unit
141144 . as_ref ( )
142145 . map_or ( false , |s| s == "1" || s == "true" ) ,
146+ guessed_language : guessed_name,
143147 } ;
144148 HttpResponse :: Ok ( ) . json ( action :: < WebMetricsCallback > (
145149 & language,
@@ -162,7 +166,7 @@ fn function_json(item: web::Json<WebFunctionPayload>, _req: HttpRequest) -> Http
162166 if let Some ( language) = language {
163167 let cfg = WebFunctionCfg { id : payload. id } ;
164168 let buf = payload. code . into_bytes ( ) ;
165- let language = guess_language ( & buf) . unwrap_or ( language) ;
169+ let language = guess_language ( & buf) . 0 . unwrap_or ( language) ;
166170 HttpResponse :: Ok ( ) . json ( action :: < WebFunctionCallback > (
167171 & language,
168172 buf,
@@ -183,7 +187,7 @@ fn function_plain(code: Bytes, info: Query<WebFunctionInfo>) -> HttpResponse {
183187 let language = get_language_for_file ( & path) ;
184188 if let Some ( language) = language {
185189 let buf = code. to_vec ( ) ;
186- let language = guess_language ( & buf) . unwrap_or ( language) ;
190+ let language = guess_language ( & buf) . 0 . unwrap_or ( language) ;
187191 let cfg = WebFunctionCfg { id : "" . to_string ( ) } ;
188192 HttpResponse :: Ok ( ) . json ( action :: < WebFunctionCallback > (
189193 & language,
@@ -266,6 +270,7 @@ pub fn run(host: String, port: u16, n_threads: usize) -> std::io::Result<()> {
266270mod tests {
267271 use actix_web:: { http:: header:: ContentType , http:: StatusCode , test} ;
268272 use bytes:: Bytes ;
273+ use pretty_assertions:: assert_eq;
269274 use serde_json:: value:: Value ;
270275
271276 use super :: * ;
@@ -592,17 +597,18 @@ mod tests {
592597 . set_json ( & WebMetricsPayload {
593598 id : "1234" . to_string ( ) ,
594599 file_name : "test.py" . to_string ( ) ,
595- code : "def foo():\n pass\n " . to_string ( ) ,
600+ code : "# -*- Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- \n def foo():\n pass\n " . to_string ( ) ,
596601 unit : false ,
597602 } )
598603 . to_request ( ) ;
599604
600605 let res: Value = test:: read_response_json ( & mut app, req) . await ;
601606 let expected = json ! ( {
602607 "id" : "1234" ,
608+ "guessed_language" : "objective-c++" ,
603609 "spaces" : { "kind" : "unit" ,
604610 "start_line" : 1 ,
605- "end_line" : 2 ,
611+ "end_line" : 3 ,
606612 "metrics" : { "cyclomatic" : 1.0 ,
607613 "nargs" : 0. ,
608614 "nexits" : 0. ,
@@ -618,11 +624,11 @@ mod tests {
618624 "unique_operands" : 1.0 ,
619625 "unique_operators" : 2.0 ,
620626 "volume" : 4.754_887_502_163_468 } ,
621- "loc" : { "cloc" : 0.0 , "lloc" : 2 .0, "sloc" : 2 .0} } ,
627+ "loc" : { "cloc" : 0.0 , "lloc" : 3 .0, "sloc" : 3 .0} } ,
622628 "name" : "test.py" ,
623629 "spaces" : [ { "kind" : "function" ,
624- "start_line" : 1 ,
625- "end_line" : 2 ,
630+ "start_line" : 2 ,
631+ "end_line" : 3 ,
626632 "metrics" : { "cyclomatic" : 1.0 ,
627633 "nargs" : 0. ,
628634 "nexits" : 0. ,
@@ -665,6 +671,7 @@ mod tests {
665671 let res: Value = test:: read_response_json ( & mut app, req) . await ;
666672 let expected = json ! ( {
667673 "id" : "1234" ,
674+ "guessed_language" : "" ,
668675 "spaces" : { "kind" : "unit" ,
669676 "start_line" : 1 ,
670677 "end_line" : 2 ,
@@ -706,6 +713,7 @@ mod tests {
706713 let res: Value = test:: read_response_json ( & mut app, req) . await ;
707714 let expected = json ! ( {
708715 "id" : "" ,
716+ "guessed_language" : "" ,
709717 "spaces" : { "kind" : "unit" ,
710718 "start_line" : 1 ,
711719 "end_line" : 2 ,
0 commit comments