@@ -20,7 +20,7 @@ var cmd = {
2020 alias : 'g' ,
2121 type : 'boolean' ,
2222 default : false ,
23- describe : 'Generate source file from template'
23+ describe : 'Generate source file from code template'
2424 } ,
2525 lang : {
2626 alias : 'l' ,
@@ -35,17 +35,11 @@ var cmd = {
3535 default : false ,
3636 describe : 'Provide extra problem details in generated file'
3737 } ,
38- desc : {
39- alias : 'd' ,
40- type : 'boolean' ,
41- default : true ,
42- describe : 'Show problem description'
43- } ,
44- template : {
45- alias : 't' ,
38+ codeonly : {
39+ alias : 'c' ,
4640 type : 'boolean' ,
4741 default : false ,
48- describe : 'Show code template'
42+ describe : 'Show code template only '
4943 } ,
5044 editor : {
5145 alias : 'e' ,
@@ -55,72 +49,75 @@ var cmd = {
5549 }
5650} ;
5751
52+ function genFileName ( problem , lang ) {
53+ // try to use a new filename to avoid overwrite by mistake
54+ var name = problem . id + '.' + problem . slug + h . langToExt ( lang ) ;
55+ var i = 0 ;
56+ while ( fs . existsSync ( name ) )
57+ name = problem . id + '.' + problem . slug + '.' + ( i ++ ) + h . langToExt ( lang ) ;
58+ return name ;
59+ }
60+
5861cmd . handler = function ( argv ) {
5962 session . argv = argv ;
6063 core . getProblem ( argv . keyword , function ( e , problem ) {
6164 if ( e ) return log . fail ( e ) ;
6265
63- var template = _ . find ( problem . templates , function ( x ) {
64- return x . value === argv . lang ;
65- } ) ;
66- if ( ! template && ( argv . template || argv . gen ) )
67- return log . fail ( 'Unknown language "' + argv . lang + '"' ) ;
68-
69- var filename ;
70- if ( argv . gen ) {
71- // try to use a new filename to avoid overwrite by mistake
72- filename = problem . id + '.' + problem . slug + h . langToExt ( argv . lang ) ;
73- var i = 0 ;
74- while ( fs . existsSync ( filename ) )
75- filename = problem . id + '.' + problem . slug + '.' + ( i ++ ) + h . langToExt ( argv . lang ) ;
66+ var code ;
67+ var needcode = argv . gen || argv . codeonly ;
68+ if ( needcode ) {
69+ var template = _ . find ( problem . templates , function ( x ) {
70+ return x . value === argv . lang ;
71+ } ) ;
72+ if ( ! template )
73+ return log . fail ( 'Unknown language "' + argv . lang + '"' ) ;
7674
7775 var opts = {
7876 lang : argv . lang ,
7977 code : template . defaultCode ,
8078 tpl : argv . extra ? 'detailed' : 'codeonly'
8179 } ;
82- fs . writeFileSync ( filename , core . exportProblem ( problem , opts ) ) ;
80+ code = core . exportProblem ( problem , opts ) ;
81+ }
82+
83+ var filename ;
84+ if ( argv . gen ) {
85+ filename = genFileName ( problem , argv . lang ) ;
86+ fs . writeFileSync ( filename , code ) ;
8387
8488 if ( argv . editor !== undefined ) {
8589 childProcess . spawn ( argv . editor || config . EDITOR , [ filename ] , {
8690 // in case your editor of choice is vim or emacs
8791 stdio : 'inherit'
8892 } ) ;
8993 }
94+ } else {
95+ if ( argv . codeonly ) {
96+ log . info ( chalk . yellow ( code ) ) ;
97+ return ;
98+ }
9099 }
91100
92- if ( argv . desc ) {
93- log . printf ( '[%d] %s %s' , problem . id , problem . name ,
94- ( problem . starred ? chalk . yellow ( icon . like ) : icon . none ) ) ;
95- log . info ( ) ;
96- log . info ( chalk . underline ( problem . link ) ) ;
97-
98- log . info ( ) ;
99- log . printf ( '* %s' , problem . category ) ;
100- log . printf ( '* %s (%.2f%%)' , h . prettyLevel ( problem . level ) , problem . percent ) ;
101+ log . printf ( '[%d] %s %s' , problem . id , problem . name ,
102+ ( problem . starred ? chalk . yellow ( icon . like ) : icon . none ) ) ;
103+ log . info ( ) ;
104+ log . info ( chalk . underline ( problem . link ) ) ;
101105
102- if ( filename )
103- log . printf ( '* Source Code: %s' , chalk . yellow . underline ( filename ) ) ;
104- if ( problem . totalAC )
105- log . printf ( '* Total Accepted: %s' , problem . totalAC ) ;
106- if ( problem . totalSubmit )
107- log . printf ( '* Total Submissions: %s' , problem . totalSubmit ) ;
108- if ( problem . testable && problem . testcase )
109- log . printf ( '* Testcase Example: %s' , chalk . yellow ( util . inspect ( problem . testcase ) ) ) ;
106+ log . info ( ) ;
107+ log . printf ( '* %s' , problem . category ) ;
108+ log . printf ( '* %s (%.2f%%)' , h . prettyLevel ( problem . level ) , problem . percent ) ;
110109
111- log . info ( ) ;
112- log . info ( problem . desc ) ;
110+ if ( filename )
111+ log . printf ( '* Source Code: %s' , chalk . yellow . underline ( filename ) ) ;
112+ if ( problem . totalAC )
113+ log . printf ( '* Total Accepted: %s' , problem . totalAC ) ;
114+ if ( problem . totalSubmit )
115+ log . printf ( '* Total Submissions: %s' , problem . totalSubmit ) ;
116+ if ( problem . testable && problem . testcase )
117+ log . printf ( '* Testcase Example: %s' , chalk . yellow ( util . inspect ( problem . testcase ) ) ) ;
113118
114- if ( argv . template ) {
115- log . info ( ) ;
116- log . info ( 'Template:' ) ;
117- log . info ( ) ;
118- }
119- }
120-
121- if ( argv . template ) {
122- log . info ( chalk . yellow ( template . defaultCode ) ) ;
123- }
119+ log . info ( ) ;
120+ log . info ( problem . desc ) ;
124121 } ) ;
125122} ;
126123
0 commit comments