|
@@ -22,89 +22,65 @@
|
|
|
|
|
|
;;; Commentary:
|
|
|
|
|
|
-;; This library implements linting for Org syntax. The sole public
|
|
|
-;; function is `org-lint', which see.
|
|
|
+;; This library implements linting for Org syntax. The process is
|
|
|
+;; started by calling `org-lint' command, which see.
|
|
|
|
|
|
-;; Internally, the library defines a new structure:
|
|
|
-;; `org-lint-checker', with the following slots:
|
|
|
-
|
|
|
-;; - NAME: Unique check identifier, as a non-nil symbol that doesn't
|
|
|
-;; start with an hyphen.
|
|
|
-;;
|
|
|
-;; 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 string 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'.
|
|
|
+;; New checkers are added by `org-lint-add-checker' function.
|
|
|
+;; Internally, all checks are 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" and
|
|
|
;; "TAB" display problematic line reported under point whereas "RET"
|
|
|
;; jumps to it. Also, "h" hides all reports similar to the current
|
|
|
;; one. Additionally, "i" removes them from subsequent reports.
|
|
|
|
|
|
-;; Checks currently implemented are:
|
|
|
-
|
|
|
-;; - duplicate CUSTOM_ID properties
|
|
|
-;; - duplicate NAME values
|
|
|
-;; - duplicate targets
|
|
|
-;; - duplicate footnote definitions
|
|
|
-;; - orphaned affiliated keywords
|
|
|
-;; - obsolete affiliated keywords
|
|
|
-;; - missing language in source blocks
|
|
|
-;; - missing back-end in export blocks
|
|
|
-;; - invalid Babel call blocks
|
|
|
-;; - NAME values with a colon
|
|
|
-;; - deprecated export block syntax
|
|
|
-;; - deprecated Babel header properties
|
|
|
-;; - wrong header arguments in source 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
|
|
|
-;; - SETUPFILE keywords with non-existent file parameter
|
|
|
-;; - INCLUDE keywords with wrong link parameter
|
|
|
-;; - obsolete markup in INCLUDE keyword
|
|
|
-;; - unknown items in OPTIONS keyword
|
|
|
-;; - spurious macro arguments or invalid macro templates
|
|
|
-;; - special properties in properties drawer
|
|
|
-;; - obsolete syntax for PROPERTIES drawers
|
|
|
-;; - Invalid EFFORT property value
|
|
|
-;; - missing definition for footnote references
|
|
|
-;; - missing reference for footnote definitions
|
|
|
-;; - non-footnote definitions in footnote section
|
|
|
-;; - probable invalid keywords
|
|
|
-;; - invalid blocks
|
|
|
-;; - misplaced planning info line
|
|
|
-;; - incomplete drawers
|
|
|
-;; - indented diary-sexps
|
|
|
-;; - obsolete QUOTE section
|
|
|
-;; - obsolete "file+application" link
|
|
|
-;; - spurious colons in tags
|
|
|
-;; - non-existent bibliography file
|
|
|
-;; - missing "print_bibliography" keyword
|
|
|
-;; - invalid "cite_export" value
|
|
|
-;; - incomplete citation object
|
|
|
+;; Checks currently implemented report the following:
|
|
|
+
|
|
|
+;; - duplicates CUSTOM_ID properties,
|
|
|
+;; - duplicate NAME values,
|
|
|
+;; - duplicate targets,
|
|
|
+;; - duplicate footnote definitions,
|
|
|
+;; - orphaned affiliated keywords,
|
|
|
+;; - obsolete affiliated keywords,
|
|
|
+;; - deprecated export block syntax,
|
|
|
+;; - deprecated Babel header syntax,
|
|
|
+;; - missing language in source blocks,
|
|
|
+;; - missing back-end in export blocks,
|
|
|
+;; - invalid Babel call blocks,
|
|
|
+;; - NAME values with a colon,
|
|
|
+;; - wrong babel headers,
|
|
|
+;; - invalid value in babel headers,
|
|
|
+;; - 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,
|
|
|
+;; - SETUPFILE keywords with non-existent file parameter,
|
|
|
+;; - INCLUDE keywords with misleading link parameter,
|
|
|
+;; - obsolete markup in INCLUDE keyword,
|
|
|
+;; - unknown items in OPTIONS keyword,
|
|
|
+;; - spurious macro arguments or invalid macro templates,
|
|
|
+;; - special properties in properties drawers,
|
|
|
+;; - obsolete syntax for properties drawers,
|
|
|
+;; - invalid duration in EFFORT property,
|
|
|
+;; - missing definition for footnote references,
|
|
|
+;; - missing reference for footnote definitions,
|
|
|
+;; - non-footnote definitions in footnote section,
|
|
|
+;; - probable invalid keywords,
|
|
|
+;; - invalid blocks,
|
|
|
+;; - misplaced planning info line,
|
|
|
+;; - probable incomplete drawers,
|
|
|
+;; - probable indented diary-sexps,
|
|
|
+;; - obsolete QUOTE section,
|
|
|
+;; - obsolete "file+application" link,
|
|
|
+;; - obsolete escape syntax in links,
|
|
|
+;; - spurious colons in tags,
|
|
|
+;; - invalid bibliography file,
|
|
|
+;; - missing "print_bibliography" keyword,
|
|
|
+;; - invalid value for "cite_export" keyword,
|
|
|
+;; - incomplete citation object.
|
|
|
|
|
|
|
|
|
;;; Code:
|
|
@@ -116,210 +92,69 @@
|
|
|
(require 'org-attach)
|
|
|
(require 'org-macro)
|
|
|
(require 'ox)
|
|
|
+(require 'seq)
|
|
|
|
|
|
|
|
|
-;;; Checkers
|
|
|
+;;; Checkers structure
|
|
|
|
|
|
(cl-defstruct (org-lint-checker (:copier nil))
|
|
|
- (name 'missing-checker-name)
|
|
|
- (description "")
|
|
|
- (categories '(default))
|
|
|
- (trust 'high)) ; `low' or `high'
|
|
|
-
|
|
|
-(defun org-lint-missing-checker-name (_)
|
|
|
- (error
|
|
|
- "`A checker has no `:name' property. Please verify `org-lint--checkers'"))
|
|
|
-
|
|
|
-(defconst org-lint--checkers
|
|
|
- (list
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'duplicate-custom-id
|
|
|
- :description "Report duplicates CUSTOM_ID properties"
|
|
|
- :categories '(link))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'duplicate-name
|
|
|
- :description "Report duplicate NAME values"
|
|
|
- :categories '(babel link))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'duplicate-target
|
|
|
- :description "Report duplicate targets"
|
|
|
- :categories '(link))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'duplicate-footnote-definition
|
|
|
- :description "Report duplicate footnote definitions"
|
|
|
- :categories '(footnote))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'orphaned-affiliated-keywords
|
|
|
- :description "Report orphaned affiliated keywords"
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'obsolete-affiliated-keywords
|
|
|
- :description "Report obsolete affiliated keywords"
|
|
|
- :categories '(obsolete))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'deprecated-export-blocks
|
|
|
- :description "Report deprecated export block syntax"
|
|
|
- :categories '(obsolete export)
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'deprecated-header-syntax
|
|
|
- :description "Report deprecated Babel header syntax"
|
|
|
- :categories '(obsolete babel)
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'missing-language-in-src-block
|
|
|
- :description "Report missing language in source blocks"
|
|
|
- :categories '(babel))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'missing-backend-in-export-block
|
|
|
- :description "Report missing back-end in export blocks"
|
|
|
- :categories '(export))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'invalid-babel-call-block
|
|
|
- :description "Report invalid Babel call blocks"
|
|
|
- :categories '(babel))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'colon-in-name
|
|
|
- :description "Report NAME values with a colon"
|
|
|
- :categories '(babel))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'wrong-header-argument
|
|
|
- :description "Report wrong babel headers"
|
|
|
- :categories '(babel))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'wrong-header-value
|
|
|
- :description "Report invalid value in babel headers"
|
|
|
- :categories '(babel)
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'deprecated-category-setup
|
|
|
- :description "Report misuse of CATEGORY keyword"
|
|
|
- :categories '(obsolete))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'invalid-coderef-link
|
|
|
- :description "Report \"coderef\" links with unknown destination"
|
|
|
- :categories '(link))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'invalid-custom-id-link
|
|
|
- :description "Report \"custom-id\" links with unknown destination"
|
|
|
- :categories '(link))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'invalid-fuzzy-link
|
|
|
- :description "Report \"fuzzy\" links with unknown destination"
|
|
|
- :categories '(link))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'invalid-id-link
|
|
|
- :description "Report \"id\" links with unknown destination"
|
|
|
- :categories '(link))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'link-to-local-file
|
|
|
- :description "Report links to non-existent local files"
|
|
|
- :categories '(link)
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'non-existent-setupfile-parameter
|
|
|
- :description "Report SETUPFILE keywords with non-existent file parameter"
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'wrong-include-link-parameter
|
|
|
- :description "Report INCLUDE keywords with misleading link parameter"
|
|
|
- :categories '(export)
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'obsolete-include-markup
|
|
|
- :description "Report obsolete markup in INCLUDE keyword"
|
|
|
- :categories '(obsolete export)
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'unknown-options-item
|
|
|
- :description "Report unknown items in OPTIONS keyword"
|
|
|
- :categories '(export)
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'invalid-macro-argument-and-template
|
|
|
- :description "Report spurious macro arguments or invalid macro templates"
|
|
|
- :categories '(export)
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'special-property-in-properties-drawer
|
|
|
- :description "Report special properties in properties drawers"
|
|
|
- :categories '(properties))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'obsolete-properties-drawer
|
|
|
- :description "Report obsolete syntax for properties drawers"
|
|
|
- :categories '(obsolete properties))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'invalid-effort-property
|
|
|
- :description "Report invalid duration in EFFORT property"
|
|
|
- :categories '(properties))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'undefined-footnote-reference
|
|
|
- :description "Report missing definition for footnote references"
|
|
|
- :categories '(footnote))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'unreferenced-footnote-definition
|
|
|
- :description "Report missing reference for footnote definitions"
|
|
|
- :categories '(footnote))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'extraneous-element-in-footnote-section
|
|
|
- :description "Report non-footnote definitions in footnote section"
|
|
|
- :categories '(footnote))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'invalid-keyword-syntax
|
|
|
- :description "Report probable invalid keywords"
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'invalid-block
|
|
|
- :description "Report invalid blocks"
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'misplaced-planning-info
|
|
|
- :description "Report misplaced planning info line"
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'incomplete-drawer
|
|
|
- :description "Report probable incomplete drawers"
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'indented-diary-sexp
|
|
|
- :description "Report probable indented diary-sexps"
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'quote-section
|
|
|
- :description "Report obsolete QUOTE section"
|
|
|
- :categories '(obsolete)
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'file-application
|
|
|
- :description "Report obsolete \"file+application\" link"
|
|
|
- :categories '(link obsolete))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'percent-encoding-link-escape
|
|
|
- :description "Report obsolete escape syntax in links"
|
|
|
- :categories '(link obsolete)
|
|
|
- :trust 'low)
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'spurious-colons
|
|
|
- :description "Report spurious colons in tags"
|
|
|
- :categories '(tags))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'non-existent-bibliography
|
|
|
- :description "Report invalid bibliography file"
|
|
|
- :categories '(cite))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'missing-print-bibliography
|
|
|
- :description "Report missing \"print_bibliography\" keyword"
|
|
|
- :categories '(cite))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'invalid-cite-export-declaration
|
|
|
- :description "Report invalid value for \"cite_export\" keyword"
|
|
|
- :categories '(cite))
|
|
|
- (make-org-lint-checker
|
|
|
- :name 'incomplete-citation
|
|
|
- :description "Report incomplete citation object"
|
|
|
- :categories '(cite)
|
|
|
- :trust 'low))
|
|
|
- "List of all available checkers.")
|
|
|
+ name summary function trust categories)
|
|
|
+
|
|
|
+(defvar org-lint--checkers nil
|
|
|
+ "List of all available checkers.
|
|
|
+This list is populated by `org-lint-add-checker' function.")
|
|
|
+
|
|
|
+;;;###autoload
|
|
|
+(defun org-lint-add-checker (name summary fun &rest props)
|
|
|
+ "Add a new checker for linter.
|
|
|
+
|
|
|
+NAME is a unique check identifier, as a non-nil symbol. SUMMARY
|
|
|
+is a short description of the check, as a string.
|
|
|
+
|
|
|
+The check is done calling the function FUN 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) where POSITION refer to the buffer
|
|
|
+position of the error, as an integer, and MESSAGE is a one-line
|
|
|
+string describing the error.
|
|
|
+
|
|
|
+Optional argument PROPS provides additional information about the
|
|
|
+checker. Currently, two properties are supported:
|
|
|
+
|
|
|
+ `: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."
|
|
|
+ (declare (indent 1))
|
|
|
+ ;; Sanity checks.
|
|
|
+ (pcase name
|
|
|
+ (`nil (error "Name field is mandatory for checkers"))
|
|
|
+ ((pred symbolp) nil)
|
|
|
+ (_ (error "Invalid type for name field")))
|
|
|
+ (unless (functionp fun)
|
|
|
+ (error "Checker field is expected to be a valid function"))
|
|
|
+ ;; Install checker in `org-lint--checkers'; uniquify by name.
|
|
|
+ (setq org-lint--checkers
|
|
|
+ (cons (apply #'make-org-lint-checker
|
|
|
+ :name name
|
|
|
+ :summary summary
|
|
|
+ :function fun
|
|
|
+ props)
|
|
|
+ (seq-remove (lambda (c) (eq name (org-lint-checker-name c)))
|
|
|
+ org-lint--checkers))))
|
|
|
+
|
|
|
+
|
|
|
+;;; Checker functions
|
|
|
|
|
|
(defun org-lint--collect-duplicates
|
|
|
(ast type extract-key extract-position build-message)
|
|
@@ -1193,6 +1028,229 @@ Use \"export %s\" instead"
|
|
|
(org-element-property :parent text))
|
|
|
"Possibly incomplete citation markup")))))
|
|
|
|
|
|
+
|
|
|
+;;; Checkers declaration
|
|
|
+
|
|
|
+(org-lint-add-checker 'duplicate-custom-id
|
|
|
+ "Report duplicates CUSTOM_ID properties"
|
|
|
+ #'org-lint-duplicate-custom-id
|
|
|
+ :categories '(link))
|
|
|
+
|
|
|
+(org-lint-add-checker 'duplicate-name
|
|
|
+ "Report duplicate NAME values"
|
|
|
+ #'org-lint-duplicate-name
|
|
|
+ :categories '(babel 'link))
|
|
|
+
|
|
|
+(org-lint-add-checker 'duplicate-target
|
|
|
+ "Report duplicate targets"
|
|
|
+ #'org-lint-duplicate-target
|
|
|
+ :categories '(link))
|
|
|
+
|
|
|
+(org-lint-add-checker 'duplicate-footnote-definition
|
|
|
+ "Report duplicate footnote definitions"
|
|
|
+ #'org-lint-duplicate-footnote-definition
|
|
|
+ :categories '(footnote))
|
|
|
+
|
|
|
+(org-lint-add-checker 'orphaned-affiliated-keywords
|
|
|
+ "Report orphaned affiliated keywords"
|
|
|
+ #'org-lint-orphaned-affiliated-keywords
|
|
|
+ :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'obsolete-affiliated-keywords
|
|
|
+ "Report obsolete affiliated keywords"
|
|
|
+ #'org-lint-obsolete-affiliated-keywords
|
|
|
+ :categories '(obsolete))
|
|
|
+
|
|
|
+(org-lint-add-checker 'deprecated-export-blocks
|
|
|
+ "Report deprecated export block syntax"
|
|
|
+ #'org-lint-deprecated-export-blocks
|
|
|
+ :trust 'low :categories '(obsolete export))
|
|
|
+
|
|
|
+(org-lint-add-checker 'deprecated-header-syntax
|
|
|
+ "Report deprecated Babel header syntax"
|
|
|
+ #'org-lint-deprecated-header-syntax
|
|
|
+ :trust 'low :categories '(obsolete babel))
|
|
|
+
|
|
|
+(org-lint-add-checker 'missing-language-in-src-block
|
|
|
+ "Report missing language in source blocks"
|
|
|
+ #'org-lint-missing-language-in-src-block
|
|
|
+ :categories '(babel))
|
|
|
+
|
|
|
+(org-lint-add-checker 'missing-backend-in-export-block
|
|
|
+ "Report missing back-end in export blocks"
|
|
|
+ #'org-lint-missing-backend-in-export-block
|
|
|
+ :categories '(export))
|
|
|
+
|
|
|
+(org-lint-add-checker 'invalid-babel-call-block
|
|
|
+ "Report invalid Babel call blocks"
|
|
|
+ #'org-lint-invalid-babel-call-block
|
|
|
+ :categories '(babel))
|
|
|
+
|
|
|
+(org-lint-add-checker 'colon-in-name
|
|
|
+ "Report NAME values with a colon"
|
|
|
+ #'org-lint-colon-in-name
|
|
|
+ :categories '(babel))
|
|
|
+
|
|
|
+(org-lint-add-checker 'wrong-header-argument
|
|
|
+ "Report wrong babel headers"
|
|
|
+ #'org-lint-wrong-header-argument
|
|
|
+ :categories '(babel))
|
|
|
+
|
|
|
+(org-lint-add-checker 'wrong-header-value
|
|
|
+ "Report invalid value in babel headers"
|
|
|
+ #'org-lint-wrong-header-value
|
|
|
+ :categories '(babel) :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'deprecated-category-setup
|
|
|
+ "Report misuse of CATEGORY keyword"
|
|
|
+ #'org-lint-deprecated-category-setup
|
|
|
+ :categories '(obsolete))
|
|
|
+
|
|
|
+(org-lint-add-checker 'invalid-coderef-link
|
|
|
+ "Report \"coderef\" links with unknown destination"
|
|
|
+ #'org-lint-invalid-coderef-link
|
|
|
+ :categories '(link))
|
|
|
+
|
|
|
+(org-lint-add-checker 'invalid-custom-id-link
|
|
|
+ "Report \"custom-id\" links with unknown destination"
|
|
|
+ #'org-lint-invalid-custom-id-link
|
|
|
+ :categories '(link))
|
|
|
+
|
|
|
+(org-lint-add-checker 'invalid-fuzzy-link
|
|
|
+ "Report \"fuzzy\" links with unknown destination"
|
|
|
+ #'org-lint-invalid-fuzzy-link
|
|
|
+ :categories '(link))
|
|
|
+
|
|
|
+(org-lint-add-checker 'invalid-id-link
|
|
|
+ "Report \"id\" links with unknown destination"
|
|
|
+ #'org-lint-invalid-id-link
|
|
|
+ :categories '(link))
|
|
|
+
|
|
|
+(org-lint-add-checker 'link-to-local-file
|
|
|
+ "Report links to non-existent local files"
|
|
|
+ #'org-lint-link-to-local-file
|
|
|
+ :categories '(link) :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'non-existent-setupfile-parameter
|
|
|
+ "Report SETUPFILE keywords with non-existent file parameter"
|
|
|
+ #'org-lint-non-existent-setupfile-parameter
|
|
|
+ :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'wrong-include-link-parameter
|
|
|
+ "Report INCLUDE keywords with misleading link parameter"
|
|
|
+ #'org-lint-wrong-include-link-parameter
|
|
|
+ :categories '(export) :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'obsolete-include-markup
|
|
|
+ "Report obsolete markup in INCLUDE keyword"
|
|
|
+ #'org-lint-obsolete-include-markup
|
|
|
+ :categories '(obsolete export) :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'unknown-options-item
|
|
|
+ "Report unknown items in OPTIONS keyword"
|
|
|
+ #'org-lint-unknown-options-item
|
|
|
+ :categories '(export) :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'invalid-macro-argument-and-template
|
|
|
+ "Report spurious macro arguments or invalid macro templates"
|
|
|
+ #'org-lint-invalid-macro-argument-and-template
|
|
|
+ :categories '(export) :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'special-property-in-properties-drawer
|
|
|
+ "Report special properties in properties drawers"
|
|
|
+ #'org-lint-special-property-in-properties-drawer
|
|
|
+ :categories '(properties))
|
|
|
+
|
|
|
+(org-lint-add-checker 'obsolete-properties-drawer
|
|
|
+ "Report obsolete syntax for properties drawers"
|
|
|
+ #'org-lint-obsolete-properties-drawer
|
|
|
+ :categories '(obsolete properties))
|
|
|
+
|
|
|
+(org-lint-add-checker 'invalid-effort-property
|
|
|
+ "Report invalid duration in EFFORT property"
|
|
|
+ #'org-lint-invalid-effort-property
|
|
|
+ :categories '(properties))
|
|
|
+
|
|
|
+(org-lint-add-checker 'undefined-footnote-reference
|
|
|
+ "Report missing definition for footnote references"
|
|
|
+ #'org-lint-undefined-footnote-reference
|
|
|
+ :categories '(footnote))
|
|
|
+
|
|
|
+(org-lint-add-checker 'unreferenced-footnote-definition
|
|
|
+ "Report missing reference for footnote definitions"
|
|
|
+ #'org-lint-unreferenced-footnote-definition
|
|
|
+ :categories '(footnote))
|
|
|
+
|
|
|
+(org-lint-add-checker 'extraneous-element-in-footnote-section
|
|
|
+ "Report non-footnote definitions in footnote section"
|
|
|
+ #'org-lint-extraneous-element-in-footnote-section
|
|
|
+ :categories '(footnote))
|
|
|
+
|
|
|
+(org-lint-add-checker 'invalid-keyword-syntax
|
|
|
+ "Report probable invalid keywords"
|
|
|
+ #'org-lint-invalid-keyword-syntax
|
|
|
+ :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'invalid-block
|
|
|
+ "Report invalid blocks"
|
|
|
+ #'org-lint-invalid-block
|
|
|
+ :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'misplaced-planning-info
|
|
|
+ "Report misplaced planning info line"
|
|
|
+ #'org-lint-misplaced-planning-info
|
|
|
+ :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'incomplete-drawer
|
|
|
+ "Report probable incomplete drawers"
|
|
|
+ #'org-lint-incomplete-drawer
|
|
|
+ :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'indented-diary-sexp
|
|
|
+ "Report probable indented diary-sexps"
|
|
|
+ #'org-lint-indented-diary-sexp
|
|
|
+ :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'quote-section
|
|
|
+ "Report obsolete QUOTE section"
|
|
|
+ #'org-lint-quote-section
|
|
|
+ :categories '(obsolete) :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'file-application
|
|
|
+ "Report obsolete \"file+application\" link"
|
|
|
+ #'org-lint-file-application
|
|
|
+ :categories '(link obsolete))
|
|
|
+
|
|
|
+(org-lint-add-checker 'percent-encoding-link-escape
|
|
|
+ "Report obsolete escape syntax in links"
|
|
|
+ #'org-lint-percent-encoding-link-escape
|
|
|
+ :categories '(link obsolete) :trust 'low)
|
|
|
+
|
|
|
+(org-lint-add-checker 'spurious-colons
|
|
|
+ "Report spurious colons in tags"
|
|
|
+ #'org-lint-spurious-colons
|
|
|
+ :categories '(tags))
|
|
|
+
|
|
|
+(org-lint-add-checker 'non-existent-bibliography
|
|
|
+ "Report invalid bibliography file"
|
|
|
+ #'org-lint-non-existent-bibliography
|
|
|
+ :categories '(cite))
|
|
|
+
|
|
|
+(org-lint-add-checker 'missing-print-bibliography
|
|
|
+ "Report missing \"print_bibliography\" keyword"
|
|
|
+ #'org-lint-missing-print-bibliography
|
|
|
+ :categories '(cite))
|
|
|
+
|
|
|
+(org-lint-add-checker 'invalid-cite-export-declaration
|
|
|
+ "Report invalid value for \"cite_export\" keyword"
|
|
|
+ #'org-lint-invalid-cite-export-declaration
|
|
|
+ :categories '(cite))
|
|
|
+
|
|
|
+(org-lint-add-checker 'incomplete-citation
|
|
|
+ "Report incomplete citation object"
|
|
|
+ #'org-lint-incomplete-citation
|
|
|
+ :categories '(cite) :trust 'low)
|
|
|
+
|
|
|
|
|
|
;;; Reports UI
|
|
|
|
|
@@ -1259,10 +1317,8 @@ for `tabulated-list-printer'."
|
|
|
(lambda (report)
|
|
|
(list (car report) trust (nth 1 report) c))
|
|
|
(save-excursion
|
|
|
- (funcall
|
|
|
- (intern (format "org-lint-%s"
|
|
|
- (org-lint-checker-name c)))
|
|
|
- ast)))))
|
|
|
+ (funcall (org-lint-checker-function c)
|
|
|
+ ast)))))
|
|
|
checkers)
|
|
|
#'car-less-than-car))))))
|
|
|
|