Interactive help

From Rosetta Code
Revision as of 05:21, 10 May 2019 by SqrtNegInf (talk | contribs) (Added Perl example)
Interactive help is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

Demonstrate any interactive (or command line) help offered by the language implementation.

This can be for exploring features or syntax, or perhaps a simple message on where to find more information.

Go

The 'go doc' command line tool shows documentation for either a package or a symbol within a package.

For example, here we list the exported functions and types in the 'strings' package in the standard library:

$ go doc strings
package strings // import "strings"

Package strings implements simple functions to manipulate UTF-8 encoded
strings.

For information about UTF-8 strings in Go, see
https://blog.golang.org/strings.

func Compare(a, b string) int
func Contains(s, substr string) bool
func ContainsAny(s, chars string) bool
func ContainsRune(s string, r rune) bool
func Count(s, substr string) int
func EqualFold(s, t string) bool
func Fields(s string) []string
func FieldsFunc(s string, f func(rune) bool) []string
func HasPrefix(s, prefix string) bool
func HasSuffix(s, suffix string) bool
func Index(s, substr string) int
func IndexAny(s, chars string) int
func IndexByte(s string, c byte) int
func IndexFunc(s string, f func(rune) bool) int
func IndexRune(s string, r rune) int
func Join(a []string, sep string) string
func LastIndex(s, substr string) int
func LastIndexAny(s, chars string) int
func LastIndexByte(s string, c byte) int
func LastIndexFunc(s string, f func(rune) bool) int
func Map(mapping func(rune) rune, s string) string
func Repeat(s string, count int) string
func Replace(s, old, new string, n int) string
func Split(s, sep string) []string
func SplitAfter(s, sep string) []string
func SplitAfterN(s, sep string, n int) []string
func SplitN(s, sep string, n int) []string
func Title(s string) string
func ToLower(s string) string
func ToLowerSpecial(c unicode.SpecialCase, s string) string
func ToTitle(s string) string
func ToTitleSpecial(c unicode.SpecialCase, s string) string
func ToUpper(s string) string
func ToUpperSpecial(c unicode.SpecialCase, s string) string
func Trim(s string, cutset string) string
func TrimFunc(s string, f func(rune) bool) string
func TrimLeft(s string, cutset string) string
func TrimLeftFunc(s string, f func(rune) bool) string
func TrimPrefix(s, prefix string) string
func TrimRight(s string, cutset string) string
func TrimRightFunc(s string, f func(rune) bool) string
func TrimSpace(s string) string
func TrimSuffix(s, suffix string) string
type Builder struct{ ... }
type Reader struct{ ... }
    func NewReader(s string) *Reader
type Replacer struct{ ... }
    func NewReplacer(oldnew ...string) *Replacer

BUG: The rule Title uses for word boundaries does not handle Unicode punctuation properly.

We can now 'dig down' to obtain the documentation for the TrimSpace function wthin the strings package:

$ go doc strings.TrimSpace
func TrimSpace(s string) string
    TrimSpace returns a slice of the string s, with all leading and trailing
    white space removed, as defined by Unicode.

and to list the methods of the strings.Replacer struct:

$ go doc strings.Replacer
type Replacer struct {
	// Has unexported fields.
}
    Replacer replaces a list of strings with replacements. It is safe for
    concurrent use by multiple goroutines.


func NewReplacer(oldnew ...string) *Replacer
func (r *Replacer) Replace(s string) string
func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)

Finally, we obtain the documentation for the strings.Replacer.WriteString method:

$ go doc strings.Replacer.WriteString
func (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)
    WriteString writes s to w with all replacements performed.

The 'go doc' tool also has some flags including a flag to list both exported and unexported symbols (-u) and to respect case when matching symbols (-c); normally lower- case letters match either case.

Jsish

prompt$ jsish
Jsish interactive: see 'help [cmd]'
# help
Jsish interactive executes commands, uses tab for completions, and has help for the following builtin commands:

     Array Boolean CData CEnum CStruct CType Channel Debugger Event File
     Function Info Interp JSON Math Number Object RegExp Signal Socket
     Sqlite String System Util Vfs WebSocket Zvfs assert clearInterval
     console decodeURI encodeURI exec exit format isFinite isMain isNaN
     load log noOp parseFloat parseInt parseOpts printf provide puts quote
     require runModule setInterval setTimeout sleep source strftime strptime
     unload update 

Help can also take options.  For example to display in a web browser try:

    help -web true WebSocket

Module help can also be displayed (non-web), as in 'help Jsi_Websrv`.
Builtin modules include:

     Jsi_Archive Jsi_CData Jsi_Csspp Jsi_Debug Jsi_DebugUI Jsi_GenDeep
     Jsi_Help Jsi_Htmlpp Jsi_Jspp Jsi_Markdeep Jsi_Module Jsi_Safe Jsi_SqliteUI
     Jsi_UnitTest Jsi_Vfs Jsi_Websrv Jsi_Wget
# help File
File.method(...)
Commands for accessing the filesystem
Methods: atime chdir chmod copy dirname executable exists extension glob isdir isfile isrelative join link lstat mkdir mknod mtime owned pwd read readable readlink realpath remove rename rootname size stat tail tempfile truncate type writable write

[File.glob options]
Option          Type    Description [Flags]
----------------------------------------------------------------------------
dir             STRING  The start directory: this path will not be prepended to results.
maxDepth        INT     Maximum directory depth to recurse into.
maxDiscard      INT     Maximum number of items to discard before giving up.
dirFilter       FUNC    Filter function for directories, returning false to discard. @function(dir:string)
filter          FUNC    Filter function to call with each file, returning false to discard. @function(file:string)
limit           INT     The maximum number of results to return/count.
noTypes         STRKEY  Filter files to exclude these "types".
prefix          STRKEY  String prefix to add to each file in list.
recurse         BOOL    Recurse into sub-directories.
retCount        BOOL    Return only the count of matches.
tails           BOOL    Returned only tail of path.
types           STRKEY  Filter files to include type: one or more of chars 'fdlpsbc' for file, directory, link, etc.

Perl

When invoked as perl -h at the command line:
Usage: perl [switches] [--] [programfile] [arguments]
  -0[octal]         specify record separator (\0, if no argument)
  -a                autosplit mode with -n or -p (splits $_ into @F)
  -C[number/list]   enables the listed Unicode features
  -c                check syntax only (runs BEGIN and CHECK blocks)
  -d[:debugger]     run program under debugger
  -D[number/list]   set debugging flags (argument is a bit mask or alphabets)
  -e program        one line of program (several -e's allowed, omit programfile)
  -E program        like -e, but enables all optional features
  -f                don't do $sitelib/sitecustomize.pl at startup
  -F/pattern/       split() pattern for -a switch (//'s are optional)
  -i[extension]     edit <> files in place (makes backup if extension supplied)
  -Idirectory       specify @INC/#include directory (several -I's allowed)
  -l[octal]         enable line ending processing, specifies line terminator
  -[mM][-]module    execute "use/no module..." before executing program
  -n                assume "while (<>) { ... }" loop around program
  -p                assume loop like -n but print line also, like sed
  -s                enable rudimentary parsing for switches after programfile
  -S                look for programfile using PATH environment variable
  -t                enable tainting warnings
  -T                enable tainting checks
  -u                dump core after parsing program
  -U                allow unsafe operations
  -v                print version, patchlevel and license
  -V[:variable]     print configuration summary (or a single Config.pm variable)
  -w                enable many useful warnings
  -W                enable all warnings
  -x[directory]     ignore text before #!perl line (optionally cd to directory)
  -X                disable all warnings

Run 'perldoc perl' for more help with Perl.
Running perldoc perl, output includes (but is not limited to):
GETTING HELP
    The perldoc program gives you access to all the documentation that comes
    with Perl. You can get more documentation, tutorials and community
    support online at <http://www.perl.org/>.

    If you're new to Perl, you should start by running "perldoc perlintro",
    which is a general intro for beginners and provides some background to
    help you navigate the rest of Perl's extensive documentation. Run
    "perldoc perldoc" to learn more things you can do with perldoc.

    For ease of access, the Perl manual has been split up into several
    sections.

  Overview
        perl                Perl overview (this section)
        perlintro           Perl introduction for beginners
        perlrun             Perl execution and options
        perltoc             Perl documentation table of contents

  Tutorials
        perlreftut          Perl references short introduction
        perldsc             Perl data structures intro
        perllol             Perl data structures: arrays of arrays
        perlrequick         Perl regular expressions quick start
        perlretut           Perl regular expressions tutorial
        perlootut           Perl OO tutorial for beginners
        perlperf            Perl Performance and Optimization Techniques
        perlstyle           Perl style guide
        perlcheat           Perl cheat sheet
        perltrap            Perl traps for the unwary
        perldebtut          Perl debugging tutorial
        perlfaq             Perl frequently asked questions
          perlfaq1          General Questions About Perl
          perlfaq2          Obtaining and Learning about Perl
          perlfaq3          Programming Tools
          perlfaq4          Data Manipulation
          perlfaq5          Files and Formats
          perlfaq6          Regexes
          perlfaq7          Perl Language Issues
          perlfaq8          System Interaction
          perlfaq9          Networking

  Reference Manual
        perlsyn             Perl syntax
        perldata            Perl data structures
        perlop              Perl operators and precedence
        perlsub             Perl subroutines
        perlfunc            Perl built-in functions
        perlpod             Perl plain old documentation
        perldiag            Perl diagnostic messages
        perldeprecation     Perl deprecations
        perllexwarn         Perl warnings and their control
        perldebug           Perl debugging
        perlvar             Perl predefined variables
        perlre              Perl regular expressions, the rest of the story
        perlref             Perl references, the rest of the story
        perlobj             Perl objects
        perltie             Perl objects hidden behind simple variables
        perlipc             Perl interprocess communication
        perlfork            Perl fork() information
        perlnumber          Perl number semantics
        perlthrtut          Perl threads tutorial
        perlport            Perl portability guide
        perllocale          Perl locale support
        perlunicode         Perl Unicode support
        perlunifaq          Perl Unicode FAQ
        perlunitut          Perl Unicode tutorial
        perlsec             Perl security
        perlmod             Perl modules: how they work
        perlmodlib          Perl modules: how to write and use
        perlmodinstall      Perl modules: how to install from CPAN
        perlutil            utilities packaged with the Perl distribution
        perlglossary        Perl Glossary
        perlbook            Perl book information
        perlcommunity       Perl community information
        perldoc             Look up Perl documentation in Pod format
        perldelta           Perl changes since previous version

Perl 6

Perl 6 help is generally in a specialized text format known as POD (Plain Old Documentation). It is sometimes referred to as POD6 to distinguish it from Perl 5 POD which is slightly different and not completely compatible. Perl 6 has a local command line help app: p6doc. It also has online browsable HTML documentation at docs.perl6.org. If you want to download the HTML docs for a local copy, or just prefer to browse the documentation as a single page docs.perl6.org/perl6.html may be more to your preference. If you prefer a different format, there are utilities available to convert the POD docs to several different formats; Markdown, PDF, Latex, plain text, etc.

Individual Perl 6 scripts are to some extent self-documenting. If the script has a MAIN sub, and it is called with improper parameters, it will display an automatically generated help message showing the various possible parameters, which are required, which are optional, and what type each takes:

<lang perl6>sub MAIN(

   Str $run,             #= Task or file name
   Str :$lang = 'perl6', #= Language, default perl6
   Int :$skip = 0,       #= Skip # to jump partially into a list
   Bool :f(:$force),     #= Override any skip parameter

) {

   # do whatever

}</lang>

When saved locally as main.p6 and invoked with no (or wrong) passed parameters:
Usage:
  main.p6 [--lang=<Str>] [--skip=<Int>] [-f|--force] <run>
  
    <run>           Task or file name
    --lang=<Str>    Language, default perl6
    --skip=<Int>    Skip # to jump partially into a list
    -f|--force      Override any skip parameter

REXX

Some REXXes offer interactive help   (via HELP or some other command).

Other REXXes have an HTML document or a PDF for showing command syntax and other general information on use of the language.

Each REXX has it's own documentation, and viewing it would depend on the host environment.