emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] [RFC] Org linting library


From: Nicolas Goaziou
Subject: [O] [RFC] Org linting library
Date: Sun, 19 Apr 2015 15:31:36 +0200

Hello,

The following library implements linting for Org syntax. The sole public
function is `org-lint', which see.

Internally, the library defines a new structure: `org-lint-checker',
with the following slots:

  - NAME: Unique check identifier, as a symbol. The check is done
    calling the function `org-lint-NAME' with one mandatory argument,
    the parse tree describing the current Org buffer. Such function
    calls are wrapped within a `save-excursion' and point is always at
    `point-min'. Its return value has to be an alist (POSITION MESSAGE)
    when POSITION refer to the buffer position of the error, as an
    integer, and MESSAGE is a strings describing the error.

  - DESCRIPTION: Summary about the check, as a string.

  - CATEGORIES: Categories relative to the check, as a list of symbol.
    They are used for filtering when calling `org-lint'. Checkers not
    explicitly associated to a category are collected in the `default'
    one.

  - TRUST: The trust level one can have in the check. It is either `low'
    or `high', depending on the heuristics implemented and the nature of
    the check. This has an indicative value only and is displayed along
    reports.

All checks have to be listed in `org-lint--checkers'.

Results are displayed in a special "*Org Lint*" buffer with a dedicated
major mode, derived from `tabulated-list-mode'. In addition to the usual
key-bindings inherited from it, "C-j" displays problematic line reported
under point and "RET" jumps to it.

Checks currently implemented are:

  - duplicates CUSTOM_ID properties
  - duplicate NAME values
  - duplicate targets
  - duplicate footnote definitions
  - orphaned affiliated keywords
  - obsolete affiliated keywords
  - missing language in src blocks
  - NAME values with a colon
  - wrong header arguments in src blocks
  - misuse of CATEGORY keyword
  - "coderef" links with unknown destination
  - "custom-id" links with unknown destination
  - "fuzzy" links with unknown destination
  - "id" links with unknown destination
  - links to non-existent local files
  - special properties in properties drawer
  - obsolete syntax for PROPERTIES drawers
  - missing definition for footnote references
  - missing reference for footnote definitions
  - non-footnote definitions in footnote section
  - probable invalid keywords
  - invalid blocks
  - probable incomplete drawers
  - obsolete QUOTE section

Since it relies on lexical binding, `pcase' and `string-prefix-p', it
cannot be added to Org 8.3, but can make it into Org 8.4, if deemed
useful enough.

Feedback welcome.


Regards,

-- 
Nicolas Goaziou                                                0x80A93738

Attachment: 0001-Implement-Org-linting.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]