command

package
v0.0.0-...-4a77b84 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 12, 2023 License: MIT Imports: 12 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ConfigCommand ...
	ConfigCommand = &cobra.Command{
		Use:     "config",
		Aliases: []string{"c"},
		Short:   "设置答题配置",
		Run: func(cmd *cobra.Command, args []string) {
			xcolor.Success(internal.NewApp().Render())
		},
	}
	// ConfigPathCommand ...
	ConfigPathCommand = &cobra.Command{
		Use:   "path",
		Short: "答题配置: 设置答题文件生成目录",
		Run: func(cmd *cobra.Command, args []string) {
			if len(args) == 0 {
				xcolor.Fail(config.SymbolError, "请输入答题文件生成目录, e.g. leet config path ~/leet")
				return
			}
			app := internal.NewApp()
			if err := app.SetPath(args[0]); err != nil {
				xcolor.Fail(config.SymbolError, err.Error())
				return
			}
			xcolor.Success(app.Render())
		},
	}
	// ConfigLangCommand ...
	ConfigLangCommand = &cobra.Command{
		Use:   "lang",
		Short: "答题配置: 设置答题文件默认语言",
		Run: func(cmd *cobra.Command, args []string) {
			if len(args) == 0 {
				xcolor.Fail(config.SymbolError, "答题文件默认语言, e.g. leet config lang golang")
				return
			}
			app := internal.NewApp()
			if err := app.SetLang(args[0]); err != nil {
				xcolor.Fail(config.SymbolError, err.Error())
				return
			}
			xcolor.Success(app.Render())
		},
	}
)
View Source
var (
	// ListCommand ...
	ListCommand = &cobra.Command{
		Use:     "list",
		Aliases: []string{"l"},
		Short:   "查询答题列表, e.g. leet list two-sum",
		Run: func(cmd *cobra.Command, args []string) {
			defer func(begin time.Time) {
				xcolor.Success(
					config.SymbolTime,
					fmt.Sprintf("耗时: %s", time.Now().Sub(begin).String()),
				)
			}(time.Now())

			list, err := internal.NewApp().GetQuestionList()
			if err != nil {
				xcolor.Fail(config.SymbolError, err.Error())
				return
			}
			matchs := make([][]interface{}, 0)
			text, num := "", int64(0)
			if len(args) > 0 {
				text, num = args[0], int64(xconvert.ToUint(args[0]))
			}
			index := 1
			for _, v := range list {
				if strings.Contains(v.Fid, text) ||
					strings.Contains(v.Title, text) ||
					strings.Contains(v.Slug, text) ||
					v.Qid == num {
					matchs = append(matchs, []interface{}{
						index,
						v.Fid,
						v.Title,
						v.Slug,
						v.Level.String(),
					})
					index++
				}
			}
			xcolor.Success(xtable.New(matchs).Style(xtable.Dashed).Border(true).Header([]string{
				"#", "ID", "标题", "标识", "难度",
			}).Text())
		},
	}
)
View Source
var (
	// QuestionCommand ...
	QuestionCommand = &cobra.Command{
		Use:     "question",
		Aliases: []string{"q"},
		Short:   "生成答题文件, e.g. leet question two-sum",
		Run: func(cmd *cobra.Command, args []string) {
			if len(args) == 0 {
				xcolor.Fail(config.SymbolError, "请输入题目标识或ID")
				return
			}
			defer func(begin time.Time) {
				xcolor.Success(
					config.SymbolTime,
					fmt.Sprintf("耗时: %s", time.Now().Sub(begin).String()),
				)
			}(time.Now())
			app := internal.NewApp()

			list, err := app.GetQuestionList()
			if err != nil {
				xcolor.Fail(config.SymbolError, err.Error())
				return
			}
			question := &config.Question{}
			text, num := args[0], int64(xconvert.ToUint(args[0]))
			for _, v := range list {
				if v.Slug == text || v.Qid == num {
					question = v
					break
				}
			}
			if question.Qid == 0 {
				xcolor.Fail(config.SymbolError, "未匹配到题目")
				return
			}
			xcolor.Success(
				config.SymbolNotice,
				fmt.Sprintf("匹配题目: %d. %s (%s)", question.Qid, question.Title, question.Link),
			)

			detail, err := app.GetQuestionDetail(question.Slug)
			if err != nil {
				xcolor.Fail(config.SymbolError, err.Error())
				return
			}
			question.Detail = detail

			lang := ""
			if app.Lang != "" && xutil.IsContains(detail.LangList, app.Lang) {
				lang = app.Lang
			} else {
				xcolor.Success(
					config.SymbolNotice,
					fmt.Sprintf("支持的编程语言是: [%s]", strings.Join(detail.LangList, ", ")),
				)

				line := liner.NewLiner()
				defer line.Close()
				line.SetCtrlCAborts(true)
				line.SetCompleter(func(line string) []string {
					list := make([]string, 0)
					for _, v := range detail.LangList {
						if strings.HasPrefix(v, strings.ToLower(line)) {
							list = append(list, v)
						}
					}
					return list
				})
				text, err := line.Prompt(config.SymbolNotice + " 输入编程语言: ")
				if err == liner.ErrPromptAborted {
					os.Exit(0)
				}
				if !xutil.IsContains(detail.LangList, text) {
					xcolor.Fail(config.SymbolError, "无效的编程语言")
					return
				}
				lang = text
			}
			xcolor.Success(config.SymbolNotice, fmt.Sprintf("使用的编程语言是: %s", lang))

			if err := app.GenerateQuestion(question, app.Path, lang); err != nil {
				xcolor.Fail(config.SymbolError, err.Error())
				return
			}
			xcolor.Success(config.SymbolSuccess, "生成答题文件成功")
		},
	}
)
View Source
var (
	// RecordCommand ...
	RecordCommand = &cobra.Command{
		Use:     "record",
		Aliases: []string{"r"},
		Short:   "生成答题纪录文件",
		Run: func(cmd *cobra.Command, args []string) {
			defer func(begin time.Time) {
				xcolor.Success(
					config.SymbolTime,
					fmt.Sprintf("耗时: %s", time.Now().Sub(begin).String()),
				)
			}(time.Now())
			app := internal.NewApp()
			list, err := app.GetQuestionList()
			if err != nil {
				xcolor.Fail(config.SymbolError, err.Error())
				return
			}
			if err := app.GenerateRecord(list, app.Path); err != nil {
				xcolor.Fail(config.SymbolError, err.Error())
				return
			}
			xcolor.Success(config.SymbolSuccess, "生成答题纪录文件成功")
		},
	}
)
View Source
var (
	// TagCommand ...
	TagCommand = &cobra.Command{
		Use:     "tag",
		Aliases: []string{"t"},
		Short:   "生成答题标签文件",
		Run: func(cmd *cobra.Command, args []string) {
			defer func(begin time.Time) {
				xcolor.Success(
					config.SymbolTime,
					fmt.Sprintf("耗时: %s", time.Now().Sub(begin).String()),
				)
			}(time.Now())
			app := internal.NewApp()

			tagList, err := app.GetTagList()
			if err != nil {
				xcolor.Fail(config.SymbolError, err.Error())
				return
			}

			tagMap, err := app.GetTagQuestionMap(app)
			if err != nil {
				xcolor.Fail(config.SymbolError, err.Error())
				return
			}

			if err := app.GenerateTag(tagList, tagMap, app.Path); err != nil {
				xcolor.Fail(config.SymbolError, err.Error())
				return
			}
			xcolor.Success(config.SymbolSuccess, "生成答题标签文件成功")
		},
	}
)

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL