# orion.shell.type

The `orion.shell.type` service is used to contribute parameter types to the Shell page. These enable contributed commands to have custom parameters with dynamically-computed completion suggestions. The service is executed when the Shell page needs either completion suggestion values to display, or the string representation for a given value.

## Service methods

Implementations of `orion.shell.type` define the following methods:

parse(arg, typeSpec, context)
  Takes the currently-typed user string and returns an object with completion suggestions. The arguments to this method are:
  arg
    An object with properties {prefix: string, suffix: string, text: string}, contains the user's currently-typed string for an instance of this parameter
  typeSpec
    This parameter's typeSpec as defined by the command that is using it
  context
    An object with property {lastParseTimestamp: number}, which can aid in determining when the completion suggestions being returned should be recomputed

The return value for this method must be either an `orion.Deferred` (if computation of the result object has to be done asynchronously), or an object with the following properties:

status
  One of the following numbers:
    0: (MATCH) the currently-typed string matches a valid value (ie.- the typing of this parameter value can now be considered complete)
    1: (PARTIAL) the currently-typed string partially matches a valid value (ie.- the typing of a valid value in progress)
    2: (ERROR) the currently-typed string does not match a subset of the initial characters of any valid values
message
  (Optional) An error message to display in the Shell page
predictions
  An array of {name: string, value: object} objects that are valid completions for the currently-typed string (name is the string to display in the suggestions list)
value
  If the currently-typed string is a match for a valid value then set this property to that {name: string, value: object} value, otherwise set its value to undefined

stringify(object, typeSpec)
  (Optional) Returns an object's string representation that is appropriate for display in the Shell page's output area. An example case where this string may not be the same as the "name" that was provided for it by the parse service is if a typed relative path should be resolved to an absolute path. If this service is not implemented then the object's "name" that was provided for it by the parse service implementation is used as its display string. The arguments to this method are:
  object
    The object to stringify
  typeSpec
    This parameter's typeSpec as defined by the command that is using it

## Service attributes

Implementations of `orion.shell.type` define the following attribute:

name
  The name of the parameter type (used in the plug-in definition of contributed commands)