github.com/vlad2095/complete@v1.1.2/gocomplete/complete.go (about)

     1  // Package main is complete tool for the go command line
     2  package main
     3  
     4  import "github.com/posener/complete"
     5  
     6  var (
     7  	ellipsis   = complete.PredictSet("./...")
     8  	anyPackage = complete.PredictFunc(predictPackages)
     9  	goFiles    = complete.PredictFiles("*.go")
    10  	anyFile    = complete.PredictFiles("*")
    11  	anyGo      = complete.PredictOr(goFiles, anyPackage, ellipsis)
    12  )
    13  
    14  func main() {
    15  	build := complete.Command{
    16  		Flags: complete.Flags{
    17  			"-o": anyFile,
    18  			"-i": complete.PredictNothing,
    19  
    20  			"-a":             complete.PredictNothing,
    21  			"-n":             complete.PredictNothing,
    22  			"-p":             complete.PredictAnything,
    23  			"-race":          complete.PredictNothing,
    24  			"-msan":          complete.PredictNothing,
    25  			"-v":             complete.PredictNothing,
    26  			"-work":          complete.PredictNothing,
    27  			"-x":             complete.PredictNothing,
    28  			"-asmflags":      complete.PredictAnything,
    29  			"-buildmode":     complete.PredictAnything,
    30  			"-compiler":      complete.PredictAnything,
    31  			"-gccgoflags":    complete.PredictSet("gccgo", "gc"),
    32  			"-gcflags":       complete.PredictAnything,
    33  			"-installsuffix": complete.PredictAnything,
    34  			"-ldflags":       complete.PredictAnything,
    35  			"-linkshared":    complete.PredictNothing,
    36  			"-pkgdir":        anyPackage,
    37  			"-tags":          complete.PredictAnything,
    38  			"-toolexec":      complete.PredictAnything,
    39  		},
    40  		Args: anyGo,
    41  	}
    42  
    43  	run := complete.Command{
    44  		Flags: complete.Flags{
    45  			"-exec": complete.PredictAnything,
    46  		},
    47  		Args: goFiles,
    48  	}
    49  
    50  	test := complete.Command{
    51  		Flags: complete.Flags{
    52  			"-args": complete.PredictAnything,
    53  			"-c":    complete.PredictNothing,
    54  			"-exec": complete.PredictAnything,
    55  
    56  			"-bench":     predictBenchmark,
    57  			"-benchtime": complete.PredictAnything,
    58  			"-count":     complete.PredictAnything,
    59  			"-cover":     complete.PredictNothing,
    60  			"-covermode": complete.PredictSet("set", "count", "atomic"),
    61  			"-coverpkg":  complete.PredictDirs("*"),
    62  			"-cpu":       complete.PredictAnything,
    63  			"-run":       predictTest,
    64  			"-short":     complete.PredictNothing,
    65  			"-timeout":   complete.PredictAnything,
    66  
    67  			"-benchmem":             complete.PredictNothing,
    68  			"-blockprofile":         complete.PredictFiles("*.out"),
    69  			"-blockprofilerate":     complete.PredictAnything,
    70  			"-coverprofile":         complete.PredictFiles("*.out"),
    71  			"-cpuprofile":           complete.PredictFiles("*.out"),
    72  			"-memprofile":           complete.PredictFiles("*.out"),
    73  			"-memprofilerate":       complete.PredictAnything,
    74  			"-mutexprofile":         complete.PredictFiles("*.out"),
    75  			"-mutexprofilefraction": complete.PredictAnything,
    76  			"-outputdir":            complete.PredictDirs("*"),
    77  			"-trace":                complete.PredictFiles("*.out"),
    78  		},
    79  		Args: anyGo,
    80  	}
    81  
    82  	fmt := complete.Command{
    83  		Flags: complete.Flags{
    84  			"-n": complete.PredictNothing,
    85  			"-x": complete.PredictNothing,
    86  		},
    87  		Args: anyGo,
    88  	}
    89  
    90  	get := complete.Command{
    91  		Flags: complete.Flags{
    92  			"-d":        complete.PredictNothing,
    93  			"-f":        complete.PredictNothing,
    94  			"-fix":      complete.PredictNothing,
    95  			"-insecure": complete.PredictNothing,
    96  			"-t":        complete.PredictNothing,
    97  			"-u":        complete.PredictNothing,
    98  		},
    99  		Args: anyGo,
   100  	}
   101  
   102  	generate := complete.Command{
   103  		Flags: complete.Flags{
   104  			"-n":   complete.PredictNothing,
   105  			"-x":   complete.PredictNothing,
   106  			"-v":   complete.PredictNothing,
   107  			"-run": complete.PredictAnything,
   108  		},
   109  		Args: anyGo,
   110  	}
   111  
   112  	vet := complete.Command{
   113  		Flags: complete.Flags{
   114  			"-n": complete.PredictNothing,
   115  			"-x": complete.PredictNothing,
   116  		},
   117  		Args: anyGo,
   118  	}
   119  
   120  	list := complete.Command{
   121  		Flags: complete.Flags{
   122  			"-e":    complete.PredictNothing,
   123  			"-f":    complete.PredictAnything,
   124  			"-json": complete.PredictNothing,
   125  		},
   126  		Args: complete.PredictOr(anyPackage, ellipsis),
   127  	}
   128  
   129  	doc := complete.Command{
   130  		Flags: complete.Flags{
   131  			"-c":   complete.PredictNothing,
   132  			"-cmd": complete.PredictNothing,
   133  			"-u":   complete.PredictNothing,
   134  		},
   135  		Args: anyPackage,
   136  	}
   137  
   138  	tool := complete.Command{
   139  		Flags: complete.Flags{
   140  			"-n": complete.PredictNothing,
   141  		},
   142  		Sub: complete.Commands{
   143  			"addr2line": {
   144  				Args: anyFile,
   145  			},
   146  			"asm": {
   147  				Flags: complete.Flags{
   148  					"-D":        complete.PredictAnything,
   149  					"-I":        complete.PredictDirs("*"),
   150  					"-S":        complete.PredictNothing,
   151  					"-V":        complete.PredictNothing,
   152  					"-debug":    complete.PredictNothing,
   153  					"-dynlink":  complete.PredictNothing,
   154  					"-e":        complete.PredictNothing,
   155  					"-o":        anyFile,
   156  					"-shared":   complete.PredictNothing,
   157  					"-trimpath": complete.PredictNothing,
   158  				},
   159  				Args: complete.PredictFiles("*.s"),
   160  			},
   161  			"cgo": {
   162  				Flags: complete.Flags{
   163  					"-debug-define":      complete.PredictNothing,
   164  					"debug-gcc":          complete.PredictNothing,
   165  					"dynimport":          anyFile,
   166  					"dynlinker":          complete.PredictNothing,
   167  					"dynout":             anyFile,
   168  					"dynpackage":         anyPackage,
   169  					"exportheader":       complete.PredictDirs("*"),
   170  					"gccgo":              complete.PredictNothing,
   171  					"gccgopkgpath":       complete.PredictDirs("*"),
   172  					"gccgoprefix":        complete.PredictAnything,
   173  					"godefs":             complete.PredictNothing,
   174  					"import_runtime_cgo": complete.PredictNothing,
   175  					"import_syscall":     complete.PredictNothing,
   176  					"importpath":         complete.PredictDirs("*"),
   177  					"objdir":             complete.PredictDirs("*"),
   178  					"srcdir":             complete.PredictDirs("*"),
   179  				},
   180  				Args: goFiles,
   181  			},
   182  			"compile": {
   183  				Flags: complete.Flags{
   184  					"-%":              complete.PredictNothing,
   185  					"-+":              complete.PredictNothing,
   186  					"-B":              complete.PredictNothing,
   187  					"-D":              complete.PredictDirs("*"),
   188  					"-E":              complete.PredictNothing,
   189  					"-I":              complete.PredictDirs("*"),
   190  					"-K":              complete.PredictNothing,
   191  					"-N":              complete.PredictNothing,
   192  					"-S":              complete.PredictNothing,
   193  					"-V":              complete.PredictNothing,
   194  					"-W":              complete.PredictNothing,
   195  					"-asmhdr":         anyFile,
   196  					"-bench":          anyFile,
   197  					"-buildid":        complete.PredictNothing,
   198  					"-complete":       complete.PredictNothing,
   199  					"-cpuprofile":     anyFile,
   200  					"-d":              complete.PredictNothing,
   201  					"-dynlink":        complete.PredictNothing,
   202  					"-e":              complete.PredictNothing,
   203  					"-f":              complete.PredictNothing,
   204  					"-h":              complete.PredictNothing,
   205  					"-i":              complete.PredictNothing,
   206  					"-importmap":      complete.PredictAnything,
   207  					"-installsuffix":  complete.PredictAnything,
   208  					"-j":              complete.PredictNothing,
   209  					"-l":              complete.PredictNothing,
   210  					"-largemodel":     complete.PredictNothing,
   211  					"-linkobj":        anyFile,
   212  					"-live":           complete.PredictNothing,
   213  					"-m":              complete.PredictNothing,
   214  					"-memprofile":     complete.PredictNothing,
   215  					"-memprofilerate": complete.PredictAnything,
   216  					"-msan":           complete.PredictNothing,
   217  					"-nolocalimports": complete.PredictNothing,
   218  					"-o":              anyFile,
   219  					"-p":              complete.PredictDirs("*"),
   220  					"-pack":           complete.PredictNothing,
   221  					"-r":              complete.PredictNothing,
   222  					"-race":           complete.PredictNothing,
   223  					"-s":              complete.PredictNothing,
   224  					"-shared":         complete.PredictNothing,
   225  					"-traceprofile":   anyFile,
   226  					"-trimpath":       complete.PredictAnything,
   227  					"-u":              complete.PredictNothing,
   228  					"-v":              complete.PredictNothing,
   229  					"-w":              complete.PredictNothing,
   230  					"-wb":             complete.PredictNothing,
   231  				},
   232  				Args: goFiles,
   233  			},
   234  			"cover": {
   235  				Flags: complete.Flags{
   236  					"-func": complete.PredictAnything,
   237  					"-html": complete.PredictAnything,
   238  					"-mode": complete.PredictSet("set", "count", "atomic"),
   239  					"-o":    anyFile,
   240  					"-var":  complete.PredictAnything,
   241  				},
   242  				Args: anyFile,
   243  			},
   244  			"dist": {
   245  				Sub: complete.Commands{
   246  					"banner":    {Flags: complete.Flags{"-v": complete.PredictNothing}},
   247  					"bootstrap": {Flags: complete.Flags{"-v": complete.PredictNothing}},
   248  					"clean":     {Flags: complete.Flags{"-v": complete.PredictNothing}},
   249  					"env":       {Flags: complete.Flags{"-v": complete.PredictNothing, "-p": complete.PredictNothing}},
   250  					"install":   {Flags: complete.Flags{"-v": complete.PredictNothing}, Args: complete.PredictDirs("*")},
   251  					"list":      {Flags: complete.Flags{"-v": complete.PredictNothing, "-json": complete.PredictNothing}},
   252  					"test":      {Flags: complete.Flags{"-v": complete.PredictNothing, "-h": complete.PredictNothing}},
   253  					"version":   {Flags: complete.Flags{"-v": complete.PredictNothing}},
   254  				},
   255  			},
   256  			"doc": doc,
   257  			"fix": {
   258  				Flags: complete.Flags{
   259  					"-diff":  complete.PredictNothing,
   260  					"-force": complete.PredictAnything,
   261  					"-r":     complete.PredictSet("context", "gotypes", "netipv6zone", "printerconfig"),
   262  				},
   263  				Args: anyGo,
   264  			},
   265  			"link": {
   266  				Flags: complete.Flags{
   267  					"-B":              complete.PredictAnything,  // note
   268  					"-D":              complete.PredictAnything,  // address (default -1)
   269  					"-E":              complete.PredictAnything,  // entry symbol name
   270  					"-H":              complete.PredictAnything,  // header type
   271  					"-I":              complete.PredictAnything,  // linker binary
   272  					"-L":              complete.PredictDirs("*"), // directory
   273  					"-R":              complete.PredictAnything,  // quantum (default -1)
   274  					"-T":              complete.PredictAnything,  // address (default -1)
   275  					"-V":              complete.PredictNothing,
   276  					"-X":              complete.PredictAnything,
   277  					"-a":              complete.PredictAnything,
   278  					"-buildid":        complete.PredictAnything, // build id
   279  					"-buildmode":      complete.PredictAnything,
   280  					"-c":              complete.PredictNothing,
   281  					"-cpuprofile":     anyFile,
   282  					"-d":              complete.PredictNothing,
   283  					"-debugtramp":     complete.PredictAnything, // int
   284  					"-dumpdep":        complete.PredictNothing,
   285  					"-extar":          complete.PredictAnything,
   286  					"-extld":          complete.PredictAnything,
   287  					"-extldflags":     complete.PredictAnything, // flags
   288  					"-f":              complete.PredictNothing,
   289  					"-g":              complete.PredictNothing,
   290  					"-importcfg":      anyFile,
   291  					"-installsuffix":  complete.PredictAnything, // dir suffix
   292  					"-k":              complete.PredictAnything, // symbol
   293  					"-libgcc":         complete.PredictAnything, // maybe "none"
   294  					"-linkmode":       complete.PredictAnything, // mode
   295  					"-linkshared":     complete.PredictNothing,
   296  					"-memprofile":     anyFile,
   297  					"-memprofilerate": complete.PredictAnything, // rate
   298  					"-msan":           complete.PredictNothing,
   299  					"-n":              complete.PredictNothing,
   300  					"-o":              complete.PredictAnything,
   301  					"-pluginpath":     complete.PredictAnything,
   302  					"-r":              complete.PredictAnything, // "dir1:dir2:..."
   303  					"-race":           complete.PredictNothing,
   304  					"-s":              complete.PredictNothing,
   305  					"-tmpdir":         complete.PredictDirs("*"),
   306  					"-u":              complete.PredictNothing,
   307  					"-v":              complete.PredictNothing,
   308  					"-w":              complete.PredictNothing,
   309  					// "-h":           complete.PredictAnything, // halt on error
   310  				},
   311  				Args: complete.PredictOr(
   312  					complete.PredictFiles("*.a"),
   313  					complete.PredictFiles("*.o"),
   314  				),
   315  			},
   316  			"nm": {
   317  				Flags: complete.Flags{
   318  					"-n":    complete.PredictNothing,
   319  					"-size": complete.PredictNothing,
   320  					"-sort": complete.PredictAnything,
   321  					"-type": complete.PredictNothing,
   322  				},
   323  				Args: anyGo,
   324  			},
   325  			"objdump": {
   326  				Flags: complete.Flags{
   327  					"-s": complete.PredictAnything,
   328  					"-S": complete.PredictNothing,
   329  				},
   330  				Args: anyFile,
   331  			},
   332  			"pack": {
   333  				/* this lacks the positional aspect of all these params */
   334  				Flags: complete.Flags{
   335  					"c":  complete.PredictNothing,
   336  					"p":  complete.PredictNothing,
   337  					"r":  complete.PredictNothing,
   338  					"t":  complete.PredictNothing,
   339  					"x":  complete.PredictNothing,
   340  					"cv": complete.PredictNothing,
   341  					"pv": complete.PredictNothing,
   342  					"rv": complete.PredictNothing,
   343  					"tv": complete.PredictNothing,
   344  					"xv": complete.PredictNothing,
   345  				},
   346  				Args: complete.PredictOr(
   347  					complete.PredictFiles("*.a"),
   348  					complete.PredictFiles("*.o"),
   349  				),
   350  			},
   351  			"pprof": {
   352  				Flags: complete.Flags{
   353  					"-callgrind":     complete.PredictNothing,
   354  					"-disasm":        complete.PredictAnything,
   355  					"-dot":           complete.PredictNothing,
   356  					"-eog":           complete.PredictNothing,
   357  					"-evince":        complete.PredictNothing,
   358  					"-gif":           complete.PredictNothing,
   359  					"-gv":            complete.PredictNothing,
   360  					"-list":          complete.PredictAnything,
   361  					"-pdf":           complete.PredictNothing,
   362  					"-peek":          complete.PredictAnything,
   363  					"-png":           complete.PredictNothing,
   364  					"-proto":         complete.PredictNothing,
   365  					"-ps":            complete.PredictNothing,
   366  					"-raw":           complete.PredictNothing,
   367  					"-svg":           complete.PredictNothing,
   368  					"-tags":          complete.PredictNothing,
   369  					"-text":          complete.PredictNothing,
   370  					"-top":           complete.PredictNothing,
   371  					"-tree":          complete.PredictNothing,
   372  					"-web":           complete.PredictNothing,
   373  					"-weblist":       complete.PredictAnything,
   374  					"-output":        anyFile,
   375  					"-functions":     complete.PredictNothing,
   376  					"-files":         complete.PredictNothing,
   377  					"-lines":         complete.PredictNothing,
   378  					"-addresses":     complete.PredictNothing,
   379  					"-base":          complete.PredictAnything,
   380  					"-drop_negative": complete.PredictNothing,
   381  					"-cum":           complete.PredictNothing,
   382  					"-seconds":       complete.PredictAnything,
   383  					"-nodecount":     complete.PredictAnything,
   384  					"-nodefraction":  complete.PredictAnything,
   385  					"-edgefraction":  complete.PredictAnything,
   386  					"-sample_index":  complete.PredictNothing,
   387  					"-mean":          complete.PredictNothing,
   388  					"-inuse_space":   complete.PredictNothing,
   389  					"-inuse_objects": complete.PredictNothing,
   390  					"-alloc_space":   complete.PredictNothing,
   391  					"-alloc_objects": complete.PredictNothing,
   392  					"-total_delay":   complete.PredictNothing,
   393  					"-contentions":   complete.PredictNothing,
   394  					"-mean_delay":    complete.PredictNothing,
   395  					"-runtime":       complete.PredictNothing,
   396  					"-focus":         complete.PredictAnything,
   397  					"-ignore":        complete.PredictAnything,
   398  					"-tagfocus":      complete.PredictAnything,
   399  					"-tagignore":     complete.PredictAnything,
   400  					"-call_tree":     complete.PredictNothing,
   401  					"-unit":          complete.PredictAnything,
   402  					"-divide_by":     complete.PredictAnything,
   403  					"-buildid":       complete.PredictAnything,
   404  					"-tools":         complete.PredictDirs("*"),
   405  					"-help":          complete.PredictNothing,
   406  				},
   407  				Args: anyFile,
   408  			},
   409  			"tour": {
   410  				Flags: complete.Flags{
   411  					"-http":        complete.PredictAnything,
   412  					"-openbrowser": complete.PredictNothing,
   413  				},
   414  			},
   415  			"trace": {
   416  				Flags: complete.Flags{
   417  					"-http":  complete.PredictAnything,
   418  					"-pprof": complete.PredictSet("net", "sync", "syscall", "sched"),
   419  				},
   420  				Args: anyFile,
   421  			},
   422  			"vet": {
   423  				Flags: complete.Flags{
   424  					"-all":                 complete.PredictNothing,
   425  					"-asmdecl":             complete.PredictNothing,
   426  					"-assign":              complete.PredictNothing,
   427  					"-atomic":              complete.PredictNothing,
   428  					"-bool":                complete.PredictNothing,
   429  					"-buildtags":           complete.PredictNothing,
   430  					"-cgocall":             complete.PredictNothing,
   431  					"-composites":          complete.PredictNothing,
   432  					"-compositewhitelist":  complete.PredictNothing,
   433  					"-copylocks":           complete.PredictNothing,
   434  					"-httpresponse":        complete.PredictNothing,
   435  					"-lostcancel":          complete.PredictNothing,
   436  					"-methods":             complete.PredictNothing,
   437  					"-nilfunc":             complete.PredictNothing,
   438  					"-printf":              complete.PredictNothing,
   439  					"-printfuncs":          complete.PredictAnything,
   440  					"-rangeloops":          complete.PredictNothing,
   441  					"-shadow":              complete.PredictNothing,
   442  					"-shadowstrict":        complete.PredictNothing,
   443  					"-shift":               complete.PredictNothing,
   444  					"-structtags":          complete.PredictNothing,
   445  					"-tags":                complete.PredictAnything,
   446  					"-tests":               complete.PredictNothing,
   447  					"-unreachable":         complete.PredictNothing,
   448  					"-unsafeptr":           complete.PredictNothing,
   449  					"-unusedfuncs":         complete.PredictAnything,
   450  					"-unusedresult":        complete.PredictNothing,
   451  					"-unusedstringmethods": complete.PredictAnything,
   452  					"-v": complete.PredictNothing,
   453  				},
   454  				Args: anyGo,
   455  			},
   456  		},
   457  	}
   458  
   459  	clean := complete.Command{
   460  		Flags: complete.Flags{
   461  			"-i": complete.PredictNothing,
   462  			"-r": complete.PredictNothing,
   463  			"-n": complete.PredictNothing,
   464  			"-x": complete.PredictNothing,
   465  		},
   466  		Args: complete.PredictOr(anyPackage, ellipsis),
   467  	}
   468  
   469  	env := complete.Command{
   470  		Args: complete.PredictAnything,
   471  	}
   472  
   473  	bug := complete.Command{}
   474  	version := complete.Command{}
   475  
   476  	fix := complete.Command{
   477  		Args: anyGo,
   478  	}
   479  
   480  	// commands that also accepts the build flags
   481  	for name, options := range build.Flags {
   482  		test.Flags[name] = options
   483  		run.Flags[name] = options
   484  		list.Flags[name] = options
   485  		vet.Flags[name] = options
   486  		get.Flags[name] = options
   487  	}
   488  
   489  	gogo := complete.Command{
   490  		Sub: complete.Commands{
   491  			"build":    build,
   492  			"install":  build, // install and build have the same flags
   493  			"run":      run,
   494  			"test":     test,
   495  			"fmt":      fmt,
   496  			"get":      get,
   497  			"generate": generate,
   498  			"vet":      vet,
   499  			"list":     list,
   500  			"doc":      doc,
   501  			"tool":     tool,
   502  			"clean":    clean,
   503  			"env":      env,
   504  			"bug":      bug,
   505  			"fix":      fix,
   506  			"version":  version,
   507  		},
   508  		GlobalFlags: complete.Flags{
   509  			"-h": complete.PredictNothing,
   510  		},
   511  	}
   512  
   513  	complete.New("go", gogo).Run()
   514  }