# orion.edit.validator

An `orion.edit.validator` service provides a function that can check the contents of a file and return a data structure indicating which lines (if any) have problems. The result of this service is used by the Orion UI to create annotations in the ruler beside each problematic line, and also to underline the specific portion of a line where the problem occurs.

## Service methods

Implementations of `orion.edit.validator` must define the following function:

checkSyntax(title, contents)
  title `String` The path and filename of the file being edited.
  contents `String` The contents of the file being edited.

Returns an `Object` giving the validation result. The returned object must have a `problems` property whose value is an array giving the problems found in the file. Each problem object must have the properties:

  description `String` A description of the problem.
  line `Number` Gives the line number where the problem was found. (Line numbers begin counting from 1.)
  start `Number` Gives the column within the line where the problem begins.
  end `Number` Optional Gives the column within the line where the problems ends. (If omitted, `start+1` is assumed.)
  severity `String` Optional Gives the severity of this problem. The severity affects how the problem is displayed in the Orion UI. Allowed values are `"warning"` and `"error"`. (If omitted, `"error"` is assumed.)

## Service attributes

Implementations of `orion.edit.validator` must define the following attributes:

contentType
  `Array` An array of Content Type IDs giving the types of files that this validator is capable of validating.

## Examples

    var provider = new eclipse.PluginProvider();
    var serviceProvider = provider.registerServiceProvider("orion.edit.validator",
      {
         checkSyntax: function(title, contents) {
           var problems = [];
           var lines = contents.split(/\r?\n/);
           for (var i=0; i < lines.length; i++) {
             var line = lines[i];
             var match = /\t \t| \t /.exec(line);
             if (match) {
               problems.push({
                 reason: "Mixed spaces and tabs",
                 line: i + 1,
                 character: match.index + 1,
                 end: match.index + match[0].length + 1,
                 severity: "warning" });
             }
           }
           var result = { problems: problems };
           return result;
         }
      },
      {
         contentType: ["text.javascript"]
      });<!--
    service.dispatchEvent = serviceProvider.dispatchEvent;-->
    provider.connect();

This example will validate JavaScript files. It finds lines containing a sequence of space-tab-space or tab-space-tab and produces a warning on every such line. Note that `+1` is necessary because column and line indices in the Orion UI are numbered from 1, not 0.