Re: [O] [RFC] Org linting library
Rainer M Krug rai...@krugs.de writes: something along the line of Link to non-existent local file ... in the description part would make clear that it is ion the description of a link. Done. Thanks. Regards,
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: Rainer M Krug rai...@krugs.de writes: OK - now I get it. The syntax implies that I want to display the image located there as the descriptor. Correct. Would it be possible for org-lint to give a more direct warning that this link is in the description and not the link itself? Could you suggest an appropriate warning? something along the line of Link to non-existent local file ... in the description part would make clear that it is ion the description of a link. And if the non-existent link is in the link part, the other could be Link to non-existent local file ... in the link part Cheers, Rainer Thank you. Regards, -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Rainer M Krug rai...@krugs.de writes: OK - now I get it. The syntax implies that I want to display the image located there as the descriptor. Correct. Would it be possible for org-lint to give a more direct warning that this link is in the description and not the link itself? Could you suggest an appropriate warning? Thank you. Regards,
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: Rainer M Krug rai...@krugs.de writes: Here, Org Lint is correct. Link's description is really a link to a file, ./__BOX__/Aerodynamic, followed by a space, and resistances.docx text. But it is in the description part - shouldn't this be considered normal text whatever it is? I wish it would. Unfortunately, Org has no proper image syntax, so we have to support plain links (i.e, no brackets) in descriptions to get image links. OK - now I get it. The syntax implies that I want to display the image located there as the descriptor. Would it be possible for org-lint to give a more direct warning that this link is in the description and not the link itself? Thanks for your patience - I am learning a lot about org by using org-lint! Rainer Regards, -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: Rainer M Krug rai...@krugs.de writes: The link , | [[file:__BOX__/Aerodynamic%20resistances.docx][file:./__BOX__/Aerodynamic resistances.docx]] ` causes the following warnings: , | 9094 low Link to non-existent local file __BOX__/Aerodynamic%20resistances.docx Fixed. Thank you. Thanks. | 9094 low Link to non-existent local file ./__BOX__/Aerodynamic ` although the file exists and the link works in org. Here, Org Lint is correct. Link's description is really a link to a file, ./__BOX__/Aerodynamic, followed by a space, and resistances.docx text. But it is in the description part - shouldn't this be considered normal text whatever it is? Rainer Regards, -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Rainer M Krug rai...@krugs.de writes: Here, Org Lint is correct. Link's description is really a link to a file, ./__BOX__/Aerodynamic, followed by a space, and resistances.docx text. But it is in the description part - shouldn't this be considered normal text whatever it is? I wish it would. Unfortunately, Org has no proper image syntax, so we have to support plain links (i.e, no brackets) in descriptions to get image links. Regards,
Re: [O] [RFC] Org linting library
One more observation: The link , | [[file:__BOX__/Aerodynamic%20resistances.docx][file:./__BOX__/Aerodynamic resistances.docx]] ` causes the following warnings: , | 9094 low Link to non-existent local file __BOX__/Aerodynamic%20resistances.docx | 9094 low Link to non-existent local file ./__BOX__/Aerodynamic ` although the file exists and the link works in org. Cheers, Rainer Nicolas Goaziou m...@nicolasgoaziou.fr writes: 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, -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Rainer M Krug rai...@krugs.de writes: The link , | [[file:__BOX__/Aerodynamic%20resistances.docx][file:./__BOX__/Aerodynamic resistances.docx]] ` causes the following warnings: , | 9094 low Link to non-existent local file __BOX__/Aerodynamic%20resistances.docx Fixed. Thank you. | 9094 low Link to non-existent local file ./__BOX__/Aerodynamic ` although the file exists and the link works in org. Here, Org Lint is correct. Link's description is really a link to a file, ./__BOX__/Aerodynamic, followed by a space, and resistances.docx text. Regards,
Re: [O] [RFC] Org linting library
Hello, Andreas Leha andreas.l...@med.uni-goettingen.de writes: some more spurious warnings I get: 1. Captions with short version: , | 1105 low Possible missing colon in keyword #+caption[Data ` 2. header arguments from ob-latex: , |451 high Unknown header argument packages |451 high Unknown header argument imoutoptions |451 high Unknown header argument iminoptions |451 high Unknown header argument imagemagick |451 high Unknown header argument fit ` Fixed. Thank you. Regards, -- Nicolas Goaziou
Re: [O] [RFC] Org linting library
Hi Nicolas, some more spurious warnings I get: 1. Captions with short version: , | 1105 low Possible missing colon in keyword #+caption[Data ` 2. header arguments from ob-latex: , |451 high Unknown header argument packages |451 high Unknown header argument imoutoptions |451 high Unknown header argument iminoptions |451 high Unknown header argument imagemagick |451 high Unknown header argument fit ` Best, Andreas
Re: [O] [RFC] Org linting library
Rainer M Krug rai...@krugs.de writes: Concerning ignoring: it would be nice to dynamically exclude certain types of messages - i.e. hiding them from the results of the linting. I don't think this is possible at the moment? I have literally about 100 names with a colon - so these messages are overshadowing the really important ones. Done. Now, h hides reports from checker and point. i ignores them altogether, which means they do not appear on subsequent refreshes. Another question: When duplicate names are detected, would it be possible to specify both (or more) line numbers in the warning? THis would make finding them much easier. Done. Regards,
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: Rainer M Krug rai...@krugs.de writes: Concerning ignoring: it would be nice to dynamically exclude certain types of messages - i.e. hiding them from the results of the linting. I don't think this is possible at the moment? I have literally about 100 names with a colon - so these messages are overshadowing the really important ones. Done. Now, h hides reports from checker and point. i ignores them altogether, which means they do not appear on subsequent refreshes. Sounds perfect - am really looking forward to trying it out on Tuesday. Another question: When duplicate names are detected, would it be possible to specify both (or more) line numbers in the warning? THis would make finding them much easier. Done. Perfect. Cheers, Rainer Regards, -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: Rainer M Krug rai...@krugs.de writes: 1) not identifying header argument with + , | #+PROPERTY: header-args+ :tangle no ` results in , | 87 high Unknown header argument ` This should be fixed. Thanks. 2) not knowing header argument file-ext from R , | #+begin_src R :exports results :file-ext pdf :results graphics :width 8 :height 8 | plotSensMainEffAll(files) | #+end_src ` results in , | 1691 high Unknown header argument file-ext ` Fixed too. Perfect - thanks. 3) I am not to sure about this one, but in LaTeX labels of figures are with the colon. Initially, I had #+LABEL: instead of #+NAME: but changed it as one should use #+NAME instead of #+LABEL, but now I get the following: , | #+CAPTION: The caption | #+NAME: fig:sensDefault | #+RESULTS: fig_sensDefault | [[file:./output/fig_sensDefault.pdf]] ` results in , | 1686 high Name fig:sensDefault contains a colon; Babel cannot use it as input ` I agree with the fact that Babel can not use it as input, but I do not want to use it as input, only as a label in LaTeX for the figure? Then you can ignore safely this report. Concerning ignoring: it would be nice to dynamically exclude certain types of messages - i.e. hiding them from the results of the linting. I don't think this is possible at the moment? I have literally about 100 names with a colon - so these messages are overshadowing the really important ones. According to the manual this should work: http://orgmode.org/manual/Images-and-tables.html: , | #+CAPTION: This is the caption for the next figure link (or table) | #+NAME: fig:SED-HR4049 | [[./img/a.jpg]] ` So maybe check if this is part of a construct with a CAPTION or if it really is used as an input somewhere? It is quite complicated to check if it is an input somewhere, e.g., it could be used as an input in another document. True - haven't considered that. 4) references where :FILE is a normal PROPERTY: (or isn't it?) , | ** Koivusalo2002 - Snow processes in a forest clearing and in a coniferous forest | :PROPERTIES: | :TITLE:Snow processes in a forest clearing and in a coniferous forest | :BTYPE:article | :CUSTOM_ID: Koivusalo2002 | :AUTHOR: Koivusalo, H. and Kokkonen, T. | :DOI: 10.1016/S0022-1694(02)00031-8 | :FILE: file:./Literature/Koivusalo_2002.pdf | :ISSN: 00221694 | :JOURNAL: Journal of Hydrology | :KEYWORDS: energy,forest,mathematical models,melt,snow,uxes | :MENDELEY-GROUPS: Energy Balance,bibliography | :MONTH:may | :NUMBER: 1-4 | :PAGES:145--164 | :URL: http://linkinghub.elsevier.com/retrieve/pii/S0022169402000318 | :VOLUME: 262 | :YEAR: 2002 | :END: | [[file:Literature/Koivusalo2002.pdf]] ` results in , | 11221 high Special property FILE found in a properties drawer ` FILE is a special property, i.e., it shouldn't be set in a property drawer. See (info (org) Special properties). OK - I'll throw it put then. I am really happy with org-lint - thanks a lot. This makes working with org files much easier. Thanks for all the feedback. Pleasure - I found several undetected problems in my org file by using the linting library. Another question: When duplicate names are detected, would it be possible to specify both (or more) line numbers in the warning? THis would make finding them much easier. Cheers, Rainer Regards, -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: Rainer M Krug rai...@krugs.de writes: Well - now it does. The following produces the error: #+PROPERTY: header-args :tangle-mode (identity #o444) * Some code #+begin_src R :results nons #+end_src The problem is the (identity #o444) which is causing the problem. Fixed. Thank you. Thanks - working. Now there re a few more lints giving wrong warnings: 1) not identifying header argument with + , | #+PROPERTY: header-args+ :tangle no ` results in , | 87 high Unknown header argument ` 2) not knowing header argument file-ext from R , | #+begin_src R :exports results :file-ext pdf :results graphics :width 8 :height 8 | plotSensMainEffAll(files) | #+end_src ` results in , | 1691 high Unknown header argument file-ext ` 3) I am not to sure about this one, but in LaTeX labels of figures are with the colon. Initially, I had #+LABEL: instead of #+NAME: but changed it as one should use #+NAME instead of #+LABEL, but now I get the following: , | #+CAPTION: The caption | #+NAME: fig:sensDefault | #+RESULTS: fig_sensDefault | [[file:./output/fig_sensDefault.pdf]] ` results in , | 1686 high Name fig:sensDefault contains a colon; Babel cannot use it as input ` I agree with the fact that Babel can not use it as input, but I do not want to use it as input, only as a label in LaTeX for the figure? According to the manual this should work: http://orgmode.org/manual/Images-and-tables.html: , | #+CAPTION: This is the caption for the next figure link (or table) | #+NAME: fig:SED-HR4049 | [[./img/a.jpg]] ` So maybe check if this is part of a construct with a CAPTION or if it really is used as an input somewhere? 4) references where :FILE is a normal PROPERTY: (or isn't it?) , | ** Koivusalo2002 - Snow processes in a forest clearing and in a coniferous forest | :PROPERTIES: | :TITLE:Snow processes in a forest clearing and in a coniferous forest | :BTYPE:article | :CUSTOM_ID: Koivusalo2002 | :AUTHOR: Koivusalo, H. and Kokkonen, T. | :DOI: 10.1016/S0022-1694(02)00031-8 | :FILE: file:./Literature/Koivusalo_2002.pdf | :ISSN: 00221694 | :JOURNAL: Journal of Hydrology | :KEYWORDS: energy,forest,mathematical models,melt,snow,uxes | :MENDELEY-GROUPS: Energy Balance,bibliography | :MONTH:may | :NUMBER: 1-4 | :PAGES:145--164 | :URL: http://linkinghub.elsevier.com/retrieve/pii/S0022169402000318 | :VOLUME: 262 | :YEAR: 2002 | :END: | [[file:Literature/Koivusalo2002.pdf]] ` results in , | 11221 high Special property FILE found in a properties drawer ` That is all I can see at the moment. Here is the ECM: --8---cut here---start-8--- #+PROPERTY: header-args :tangle-mode (identity #o444) #+PROPERTY: header-args :tangle-mode (identity #o444) #+PROPERTY: header-args+ :tangle no * file-ext #+begin_src R :exports results :file-ext pdf :results graphics :width 8 :height 8 cat(23) #+end_src * And the : in NAME #+CAPTION: The caption #+NAME: fig:sensDefault #+RESULTS: fig_sensDefault [[file:./output/fig_sensDefault.pdf]] * References ** Mahat2013 - Testing above- and below-canopy representations of turbulent fluxes in an energy balance snowmelt model :PROPERTIES: :TITLE:Testing above- and below-canopy representations of turbulent fluxes in an energy balance snowmelt model :BTYPE:article :CUSTOM_ID: Mahat2013 :AUTHOR: Mahat, Vinod and Tarboton, David G. and Molotch, Noah P. :DOI: 10.1002/wrcr.20073 :FILE: :Users/rainerkrug/Documents/Mendeley/Files/Mahat, Tarboton, Molotch/Mahat, Tarboton, Molotch\_2013\_Testing above- and below-canopy representations of turbulent fluxes in an energy balance snowmelt model.pdf:pdf :ISSN: 00431397 :JOURNAL: Water Resources Research :MONTH:feb :NUMBER: 2 :PAGES:1107--1122 :URL: http://doi.wiley.com/10.1002/wrcr.20073 :VOLUME: 49 :YEAR: 2013 :END: [[file:Literature/Mahat2013.pdf]] --8---cut here---end---8--- which results in , | 3 high Unknown header argument | 8 high Unknown header argument file-ext | 15 high Name fig:sensDefault contains a colon; Babel cannot use it as input | 17 low Link to non-existent local file ./output/fig_sensDefault.pdf | 28 high Special property FILE found in a properties drawer | 38 low Link to non-existent local file Literature/Mahat2013.pdf ` The Link to non-existent ... are obvious. I am really happy with org-lint - thanks a lot. This makes working with org files much easier. Thanks, Rainer Regards, -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10
Re: [O] [RFC] Org linting library
Rainer M Krug rai...@krugs.de writes: 1) not identifying header argument with + , | #+PROPERTY: header-args+ :tangle no ` results in , | 87 high Unknown header argument ` This should be fixed. 2) not knowing header argument file-ext from R , | #+begin_src R :exports results :file-ext pdf :results graphics :width 8 :height 8 | plotSensMainEffAll(files) | #+end_src ` results in , | 1691 high Unknown header argument file-ext ` Fixed too. 3) I am not to sure about this one, but in LaTeX labels of figures are with the colon. Initially, I had #+LABEL: instead of #+NAME: but changed it as one should use #+NAME instead of #+LABEL, but now I get the following: , | #+CAPTION: The caption | #+NAME: fig:sensDefault | #+RESULTS: fig_sensDefault | [[file:./output/fig_sensDefault.pdf]] ` results in , | 1686 high Name fig:sensDefault contains a colon; Babel cannot use it as input ` I agree with the fact that Babel can not use it as input, but I do not want to use it as input, only as a label in LaTeX for the figure? Then you can ignore safely this report. According to the manual this should work: http://orgmode.org/manual/Images-and-tables.html: , | #+CAPTION: This is the caption for the next figure link (or table) | #+NAME: fig:SED-HR4049 | [[./img/a.jpg]] ` So maybe check if this is part of a construct with a CAPTION or if it really is used as an input somewhere? It is quite complicated to check if it is an input somewhere, e.g., it could be used as an input in another document. 4) references where :FILE is a normal PROPERTY: (or isn't it?) , | ** Koivusalo2002 - Snow processes in a forest clearing and in a coniferous forest | :PROPERTIES: | :TITLE:Snow processes in a forest clearing and in a coniferous forest | :BTYPE:article | :CUSTOM_ID: Koivusalo2002 | :AUTHOR: Koivusalo, H. and Kokkonen, T. | :DOI: 10.1016/S0022-1694(02)00031-8 | :FILE: file:./Literature/Koivusalo_2002.pdf | :ISSN: 00221694 | :JOURNAL: Journal of Hydrology | :KEYWORDS: energy,forest,mathematical models,melt,snow,uxes | :MENDELEY-GROUPS: Energy Balance,bibliography | :MONTH:may | :NUMBER: 1-4 | :PAGES:145--164 | :URL: http://linkinghub.elsevier.com/retrieve/pii/S0022169402000318 | :VOLUME: 262 | :YEAR: 2002 | :END: | [[file:Literature/Koivusalo2002.pdf]] ` results in , | 11221 high Special property FILE found in a properties drawer ` FILE is a special property, i.e., it shouldn't be set in a property drawer. See (info (org) Special properties). I am really happy with org-lint - thanks a lot. This makes working with org files much easier. Thanks for all the feedback. Regards,
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: Rainer M Krug rai...@krugs.de writes: There is an example where I get the error: * Fitting the kernel to the data The parameter which will be fitted can be found in Table [[tab:fitInitial]] #+CAPTION: Variables used for the initial fit of the wind profile using the function and the initial values. #+LABEL: tab:fitInitial | variable | initial value | remark | |+---+--| The cause is the link [[tab:initial]] If I remove everything below and including the line #+CAPTION the linting works. Fixed. Thank you. Thanks. Two more questions: I get the following warnings: , | 10 low Unknown OPTIONS item @ | 11 low Unknown OPTIONS item skip | 11 low Unknown OPTIONS item LaTeX | 11 low Unknown OPTIONS item TeX ` based on the following lines: , | #+OPTIONS: H:3 num:t toc:t \n:nil @:t ::t |:t ^:nil -:t f:t *:t :t | #+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc ` The file is not that old - but have these options changed? and I get , | 1821 low Orphaned affiliated keyword: RESULTS ` caused by an orphaned , | #+RESULTS: ` But these are created by evaluating a code block which produced no results - so they are a valid part of the document? And an error: I get, in the same document I got the other errors, the following error: , | Org linting process starting... | org-split-string: Wrong type argument: stringp, 292 ` The backtrace is huge - how can I produce a usable backtrace? Hope this helps, Rainer Regards, -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: Rainer M Krug rai...@krugs.de writes: Two more questions: I get the following warnings: , | 10 low Unknown OPTIONS item @ | 11 low Unknown OPTIONS item skip | 11 low Unknown OPTIONS item LaTeX | 11 low Unknown OPTIONS item TeX ` based on the following lines: , | #+OPTIONS: H:3 num:t toc:t \n:nil @:t ::t |:t ^:nil -:t f:t *:t :t | #+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc ` The file is not that old - but have these options changed? These options do not do anything. @ and skip have no equivalent. TeX and LaTeX are now tex. See (info (org) Export settings). and I get , | 1821 low Orphaned affiliated keyword: RESULTS ` caused by an orphaned , | #+RESULTS: ` But these are created by evaluating a code block which produced no results - so they are a valid part of the document? Correct. Note however the low trust on this check. It's just a heads-up. Anyway I remove such reports for RESULTS in wip-lint. And an error: I get, in the same document I got the other errors, the following error: , | Org linting process starting... | org-split-string: Wrong type argument: stringp, 292 ` The backtrace is huge - how can I produce a usable backtrace? Usually, only the last top-level function call is useful. It would be better to provide an ECM, tho. The error comes from Babel header check. Does 292 ring a bell in a #+HEADER: line? Addition to my last email: when I close emacs and open it again and try to linter the ECM, it works - is it possible that there is some caching which is not cleaned up? Rainer Regards, -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: Rainer M Krug rai...@krugs.de writes: Two more questions: I get the following warnings: , | 10 low Unknown OPTIONS item @ | 11 low Unknown OPTIONS item skip | 11 low Unknown OPTIONS item LaTeX | 11 low Unknown OPTIONS item TeX ` based on the following lines: , | #+OPTIONS: H:3 num:t toc:t \n:nil @:t ::t |:t ^:nil -:t f:t *:t :t | #+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc ` The file is not that old - but have these options changed? These options do not do anything. @ and skip have no equivalent. TeX and LaTeX are now tex. See (info (org) Export settings). and I get , | 1821 low Orphaned affiliated keyword: RESULTS ` caused by an orphaned , | #+RESULTS: ` But these are created by evaluating a code block which produced no results - so they are a valid part of the document? Correct. Note however the low trust on this check. It's just a heads-up. Anyway I remove such reports for RESULTS in wip-lint. And an error: I get, in the same document I got the other errors, the following error: , | Org linting process starting... | org-split-string: Wrong type argument: stringp, 292 ` The backtrace is huge - how can I produce a usable backtrace? Usually, only the last top-level function call is useful. It would be better to provide an ECM, tho. The error comes from Babel header check. Does 292 ring a bell in a #+HEADER: line? Hi here is an ECM: , | * Matlab code | | #+begin_src octave | | #+end_src ` Actually, whatever I put there instead of octave, I get the same error. This is very strange. What is the problem here? Cheers, Rainer Regards, -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: Rainer M Krug rai...@krugs.de writes: Two more questions: I get the following warnings: , | 10 low Unknown OPTIONS item @ | 11 low Unknown OPTIONS item skip | 11 low Unknown OPTIONS item LaTeX | 11 low Unknown OPTIONS item TeX ` based on the following lines: , | #+OPTIONS: H:3 num:t toc:t \n:nil @:t ::t |:t ^:nil -:t f:t *:t :t | #+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc ` The file is not that old - but have these options changed? These options do not do anything. @ and skip have no equivalent. TeX and LaTeX are now tex. See (info (org) Export settings). and I get , | 1821 low Orphaned affiliated keyword: RESULTS ` caused by an orphaned , | #+RESULTS: ` But these are created by evaluating a code block which produced no results - so they are a valid part of the document? Correct. Note however the low trust on this check. It's just a heads-up. Anyway I remove such reports for RESULTS in wip-lint. And an error: I get, in the same document I got the other errors, the following error: , | Org linting process starting... | org-split-string: Wrong type argument: stringp, 292 ` The backtrace is huge - how can I produce a usable backtrace? Usually, only the last top-level function call is useful. It would be better to provide an ECM, tho. The error comes from Babel header check. Does 292 ring a bell in a #+HEADER: line? Well - now it does. The following produces the error: --8---cut here---start-8--- #+PROPERTY: header-args :tangle-mode (identity #o444) * Some code #+begin_src R :results nons #+end_src --8---cut here---end---8--- The problem is the (identity #o444) which is causing the problem. Here it is, Rainer Regards, -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Rainer M Krug rai...@krugs.de writes: Well - now it does. The following produces the error: #+PROPERTY: header-args :tangle-mode (identity #o444) * Some code #+begin_src R :results nons #+end_src The problem is the (identity #o444) which is causing the problem. Fixed. Thank you. Regards,
Re: [O] [RFC] Org linting library
Rainer M Krug rai...@krugs.de writes: Two more questions: I get the following warnings: , | 10 low Unknown OPTIONS item @ | 11 low Unknown OPTIONS item skip | 11 low Unknown OPTIONS item LaTeX | 11 low Unknown OPTIONS item TeX ` based on the following lines: , | #+OPTIONS: H:3 num:t toc:t \n:nil @:t ::t |:t ^:nil -:t f:t *:t :t | #+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc ` The file is not that old - but have these options changed? These options do not do anything. @ and skip have no equivalent. TeX and LaTeX are now tex. See (info (org) Export settings). and I get , | 1821 low Orphaned affiliated keyword: RESULTS ` caused by an orphaned , | #+RESULTS: ` But these are created by evaluating a code block which produced no results - so they are a valid part of the document? Correct. Note however the low trust on this check. It's just a heads-up. Anyway I remove such reports for RESULTS in wip-lint. And an error: I get, in the same document I got the other errors, the following error: , | Org linting process starting... | org-split-string: Wrong type argument: stringp, 292 ` The backtrace is huge - how can I produce a usable backtrace? Usually, only the last top-level function call is useful. It would be better to provide an ECM, tho. The error comes from Babel header check. Does 292 ring a bell in a #+HEADER: line? Regards,
Re: [O] [RFC] Org linting library
Rainer M Krug rai...@krugs.de writes: Rainer M Krug rai...@krugs.de writes: Andreas Leha andreas.l...@med.uni-goettingen.de writes: Hi Rainer, Rainer M Krug rai...@krugs.de writes: Nicolas Goaziou m...@nicolasgoaziou.fr writes: 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. This sounds very interesting and I would like to try it out. I understand that it can't be put into master, but could it be put into a branch? This would make testing a bit easier. It is. The branch is called `wip-lint'. Thanks (also to Nicolas) - I found it. Just expected the branch to be tracked automatically. This is really brilliant! But I now get a message in one .org file: , | Org linting process starting... | Search failed: ^[ ]*#\\+NAME: +tab:sensVar ` and no results. Works in other .org files. This one is rather long (11570 lines) and many code blocks. Just let me know how I can trace down where this is coming from and what the message tells me. It seems that the error comes from the fact that ~#+LABEL: sensVar~ was defined twice. Renaming these results in working linting. OK - please ignore this last comment. There is an example where I get the error: --8---cut here---start-8--- * Fitting the kernel to the data The parameter which will be fitted can be found in Table [[tab:fitInitial]] #+CAPTION: Variables used for the initial fit of the wind profile using the function and the initial values. #+LABEL: tab:fitInitial | variable | initial value | remark | |+---+--| --8---cut here---end---8--- The cause is the link [[tab:initial]] If I remove everything below and including the line #+CAPTION the linting works. , | 2 high Unknown fuzzy location tab:fitInitial ` Cheers, Rainer Rainer Thanks, Rainer Regards, Andreas -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982
Re: [O] [RFC] Org linting library
Rainer M Krug rai...@krugs.de writes: There is an example where I get the error: * Fitting the kernel to the data The parameter which will be fitted can be found in Table [[tab:fitInitial]] #+CAPTION: Variables used for the initial fit of the wind profile using the function and the initial values. #+LABEL: tab:fitInitial | variable | initial value | remark | |+---+--| The cause is the link [[tab:initial]] If I remove everything below and including the line #+CAPTION the linting works. Fixed. Thank you. Regards,
Re: [O] [RFC] Org linting library
Hi Rainer, Rainer M Krug rai...@krugs.de writes: Rainer M Krug rai...@krugs.de writes: Rainer M Krug rai...@krugs.de writes: Andreas Leha andreas.l...@med.uni-goettingen.de writes: Hi Rainer, Rainer M Krug rai...@krugs.de writes: Nicolas Goaziou m...@nicolasgoaziou.fr writes: 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. This sounds very interesting and I would like to try it out. I understand that it can't be put into master, but could it be put into a branch? This would make testing a bit easier. It is. The branch is called `wip-lint'. Thanks (also to Nicolas) - I found it. Just expected the branch to be tracked automatically. This is really brilliant! But I now get a message in one .org file: , | Org linting process starting... | Search failed: ^[]*#\\+NAME: +tab:sensVar ` and no results. Works in other .org files. This one is rather long (11570 lines) and many code blocks. Just let me know how I can trace down where this is coming from and what the message tells me. It seems that the error comes from the fact that ~#+LABEL: sensVar~ was defined twice. Renaming these results in working linting. OK - please ignore this last comment. There is an example where I get the error: * Fitting the kernel to the data The parameter which will be fitted can be found in Table [[tab:fitInitial]] #+CAPTION: Variables used for the initial fit of the wind profile using the function and the initial values. #+LABEL: tab:fitInitial | variable | initial value | remark | |+---+--| The cause is the link [[tab:initial]] If I remove everything below and including the line #+CAPTION the linting works. , | 2 high Unknown fuzzy location tab:fitInitial ` Untested - but should that not be #+NAME: tab:fitInitial rather than #+LABEL? Cheers, Andreas
Re: [O] [RFC] Org linting library
Envoyé de mon iPhone Le 20 mai 2015 à 22:42, Andreas Leha andreas.l...@med.uni-goettingen.de a écrit : Hi Rainer, Rainer M Krug rai...@krugs.de writes: Rainer M Krug rai...@krugs.de writes: Rainer M Krug rai...@krugs.de writes: Andreas Leha andreas.l...@med.uni-goettingen.de writes: Hi Rainer, Rainer M Krug rai...@krugs.de writes: Nicolas Goaziou m...@nicolasgoaziou.fr writes: 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. This sounds very interesting and I would like to try it out. I understand that it can't be put into master, but could it be put into a branch? This would make testing a bit easier. It is. The branch is called `wip-lint'. Thanks (also to Nicolas) - I found it. Just expected the branch to be tracked automatically. This is really brilliant! But I now get a message in one .org file: , | Org linting process starting... | Search failed: ^[]*#\\+NAME: +tab:sensVar ` and no results. Works in other .org files. This one is rather long (11570 lines) and many code blocks. Just let me know how I can trace down where this is coming from and what the message tells me. It seems that the error comes from the fact that ~#+LABEL: sensVar~ was defined twice. Renaming these results in working linting. OK - please ignore this last comment. There is an example where I get the error: * Fitting the kernel to the data The parameter which will be fitted can be found in Table [[tab:fitInitial]] #+CAPTION: Variables used for the initial fit of the wind profile using the function and the initial values. #+LABEL: tab:fitInitial | variable | initial value | remark | |+---+--| The cause is the link [[tab:initial]] If I remove everything below and including the line #+CAPTION the linting works. , | 2 high Unknown fuzzy location tab:fitInitial ` Untested - but should that not be #+NAME: tab:fitInitial rather than #+LABEL? Yes - that would be correct. But the linting should tell me that instead of failing with this message Cheers, Rainer Cheers, Andreas
Re: [O] [RFC] Org linting library
Rainer M Krug rai...@krugs.de writes: Andreas Leha andreas.l...@med.uni-goettingen.de writes: Hi Rainer, Rainer M Krug rai...@krugs.de writes: Nicolas Goaziou m...@nicolasgoaziou.fr writes: 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. This sounds very interesting and I would like to try it out. I understand that it can't be put into master, but could it be put into a branch? This would make testing a bit easier. It is. The branch is called `wip-lint'. Thanks (also to Nicolas) - I found it. Just expected the branch to be tracked automatically. This is really brilliant! But I now get a message in one .org file: , | Org linting process starting... | Search failed: ^[ ]*#\\+NAME: +tab:sensVar ` and no results. Works in other .org files. This one is rather long (11570 lines) and many code blocks. Just let me know how I can trace down where this is coming from and what the message tells me. It seems that the error comes from the fact that ~#+LABEL: sensVar~ was defined twice. Renaming these results in working linting. Rainer Thanks, Rainer Regards, Andreas -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Andreas Leha andreas.l...@med.uni-goettingen.de writes: Hi Rainer, Rainer M Krug rai...@krugs.de writes: Nicolas Goaziou m...@nicolasgoaziou.fr writes: 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. This sounds very interesting and I would like to try it out. I understand that it can't be put into master, but could it be put into a branch? This would make testing a bit easier. It is. The branch is called `wip-lint'. Thanks (also to Nicolas) - I found it. Just expected the branch to be tracked automatically. This is really brilliant! But I now get a message in one .org file: , | Org linting process starting... | Search failed: ^[]*#\\+NAME: +tab:sensVar ` and no results. Works in other .org files. This one is rather long (11570 lines) and many code blocks. Just let me know how I can trace down where this is coming from and what the message tells me. Thanks, Rainer Regards, Andreas -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: 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, Hi Nicolas, I have finally made some time to test this. I get some unexpected warnings: 79 low Unknown value myfile.R for header :tangle 192 low Unknown value none for header :results 22985 low Unknown value never-export for header :eval Thanks for this very useful tool! Thanks, Andreas
Re: [O] [RFC] Org linting library
Hi Rainer, Rainer M Krug rai...@krugs.de writes: Nicolas Goaziou m...@nicolasgoaziou.fr writes: 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. This sounds very interesting and I would like to try it out. I understand that it can't be put into master, but could it be put into a branch? This would make testing a bit easier. It is. The branch is called `wip-lint'. Regards, Andreas
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: 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. This sounds very interesting and I would like to try it out. I understand that it can't be put into master, but could it be put into a branch? This would make testing a bit easier. Thanks, Rainer Feedback welcome. Regards, -- Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany) Centre of Excellence for Invasion Biology Stellenbosch University South Africa Tel : +33 - (0)9 53 10 27 44 Cell: +33 - (0)6 85 62 59 98 Fax : +33 - (0)9 58 10 27 44 Fax (D):+49 - (0)3 21 21 25 22 44 email: rai...@krugs.de Skype: RMkrug PGP: 0x0F52F982 signature.asc Description: PGP signature
Re: [O] [RFC] Org linting library
Hello, Andreas Leha andreas.l...@med.uni-goettingen.de writes: I have finally made some time to test this. I get some unexpected warnings: 79 low Unknown value myfile.R for header :tangle 192 low Unknown value none for header :results Make sure you rebased the wip-lint branch on top of master. 22985 low Unknown value never-export for header :eval I added it to allowed value. You need to update Org. Thanks for this very useful tool! Thanks for the feedback. Regards, -- Nicolas Goaziou
Re: [O] [RFC] Org linting library
Hi Nicolas, Nicolas Goaziou m...@nicolasgoaziou.fr writes: I have finally made some time to test this. I get some unexpected warnings: 79 low Unknown value myfile.R for header :tangle 192 low Unknown value none for header :results Make sure you rebased the wip-lint branch on top of master. 22985 low Unknown value never-export for header :eval I added it to allowed value. You need to update Org. I just pulled and rebased again. The never-export issue is gone, indeed. The others are still there. What am I missing here? Thanks, Andreas
Re: [O] [RFC] Org linting library
Rainer M Krug rai...@krugs.de writes: This sounds very interesting and I would like to try it out. I understand that it can't be put into master, but could it be put into a branch? It already lives in wip-lint branch. Regards,
Re: [O] [RFC] Org linting library
Hi Nicolas, Nicolas Goaziou m...@nicolasgoaziou.fr writes: Andreas Leha andreas.l...@med.uni-goettingen.de writes: I just pulled and rebased again. The never-export issue is gone, indeed. The others are still there. What am I missing here? Nothing. I overlooked a typo. It should be fixed in wip-lint. Thanks. Now the :tangle header argument does not produce a warning. But I still get --8---cut here---start-8--- 191 low Unknown value none for header :results --8---cut here---end---8--- Ahh, and one more thing: The :tangle property in my test case was set buffer wide through --8---cut here---start-8--- #+PROPERTY: header-args:R :tangle myfile.R --8---cut here---end---8--- But still, it produced a warning for each code block. It would be nicer if that warning was issued only once, IMO. But that is very minor. Regards, Andreas
Re: [O] [RFC] Org linting library
Hi Nicolas, Nicolas Goaziou m...@nicolasgoaziou.fr writes: Andreas Leha andreas.l...@med.uni-goettingen.de writes: But I still get 191 low Unknown value none for header :results Could you show an ECM? I cannot reproduce it. Sure: --8---cut here---start-8--- * Test code block names #+name: test #+begin_src R :results none 1:10 #+end_src --8---cut here---end---8--- Tested with emacs -Q with the same result: --8---cut here---start-8--- 4 low Unknown value none for header :results --8---cut here---end---8--- Regards, Andreas
Re: [O] [RFC] Org linting library
Andreas Leha andreas.l...@med.uni-goettingen.de writes: * Test code block names #+name: test #+begin_src R :results none 1:10 #+end_src OK. It was a R-specific bug. It should now be fixed. Thank you. Regards,
Re: [O] [RFC] Org linting library
Hi Nicolas, Nicolas Goaziou m...@nicolasgoaziou.fr writes: Andreas Leha andreas.l...@med.uni-goettingen.de writes: * Test code block names #+name: test #+begin_src R :results none 1:10 #+end_src OK. It was a R-specific bug. It should now be fixed. Thank you! Fix confirmed. The last warning is gone. Thanks, Andreas
Re: [O] [RFC] Org linting library
Andreas Leha andreas.l...@med.uni-goettingen.de writes: But I still get 191 low Unknown value none for header :results Could you show an ECM? I cannot reproduce it. Regards,
Re: [O] [RFC] Org linting library
Andreas Leha andreas.l...@med.uni-goettingen.de writes: I just pulled and rebased again. The never-export issue is gone, indeed. The others are still there. What am I missing here? Nothing. I overlooked a typo. It should be fixed in wip-lint. Thank you. Regards,
Re: [O] [RFC] Org linting library
-Original Message- On Behalf Of Nicolas Goaziou Sent: Sunday, 2015 April 19 09:32 To: Org Mode List Subject: [O] [RFC] Org linting library Hello, The following library implements linting for Org syntax. The sole public function is `org-lint', which see. Nicolas Goaziou 0x80A93738 [Doug Lewan] Very cool. Thank you. -- ,Doug Douglas Lewan Shubert Ticketing (201) 489-8600 ext 224 or ext 4335 The human brain is the most complex thing known to man, according to the human brain.
Re: [O] [RFC] Org linting library
Sebastien Vauban sva-news-D0wtAvR13HarG/idocf...@public.gmane.org writes: Could `org-lint' return a success/fail indication, so that we could write something along in an export hook: (if (org-lint) ... continue with export ... ... stop with message or display the lint buffer ...) As well, could the buffer be hidden (or killed) if it's empty? When called non-interactively `org-lint' returns the reports, as an alist or nil, so it can be used as a predicate. Regards,
Re: [O] [RFC] Org linting library
Nicolas Goaziou wrote: Here's another update. I added a few more tests. If there's no more bug report or feedback, I'll simply put it in a wip-lint branch until Org 8.4 starts its development cycle. Could `org-lint' return a success/fail indication, so that we could write something along in an export hook: --8---cut here---start-8--- (if (org-lint) ... continue with export ... ... stop with message or display the lint buffer ...) --8---cut here---end---8--- As well, could the buffer be hidden (or killed) if it's empty? Best regards, Seb -- Sebastien Vauban
Re: [O] [RFC] Org linting library
Nicolas Goaziou m...@nicolasgoaziou.fr writes: Here's another update. I added a few more tests. If there's no more bug report or feedback, I'll simply put it in a wip-lint branch until Org 8.4 starts its development cycle. This is handy! No bugs to report.
Re: [O] [RFC] Org linting library
Here's another update. I added a few more tests. If there's no more bug report or feedback, I'll simply put it in a wip-lint branch until Org 8.4 starts its development cycle. Regards, org-lint.el Description: application/emacs-lisp
Re: [O] [RFC] Org linting library
Hello Nicolas, Nicolas Goaziou wrote: Here's another update. I added a few more tests. If there's no more bug report or feedback, I'll simply put it in a wip-lint branch until Org 8.4 starts its development cycle. I'd like to enforce org-lint on all my Org docs, either in a find-file hook or before export, for example. Can't you put it in master as well? Best regards, Seb -- Sebastien Vauban
Re: [O] [RFC] Org linting library
Sebastien Vauban sva-news-D0wtAvR13HarG/idocf...@public.gmane.org writes: I'd like to enforce org-lint on all my Org docs, either in a find-file hook or before export, for example. Can't you put it in master as well? No, I can't. As explained in the original post, org-lint.el requires at least Emacs 24.3 (lexical binding, pcase, tabulated-list-mode...) whereas Org 8.3 is expected to be Emacs 23 compatible. Regards,
Re: [O] [RFC] Org linting library
Charles C. Berry ccbe...@ucsd.edu writes: - orphaned affiliated keywords This generates an orphaned keyword warning, but seems innocuous and is what babel renders. #+NAME: abc #+BEGIN_SRC emacs-lisp nil #+END_SRC #+RESULTS: abc Indeed, it is innocuous. It is meant to catch, e.g., #+CAPTION: my table | table with a spurious newline above | This check has a low trust level so false positive are OK. - wrong header arguments in src blocks IFF the header args are in the #+BEGIN_SRC line. #+HEADER lines and header-arg properties are not screened AFAICS. Indeed. Here's an update. Thank you for the feedback. Regards, From 1b6b392f6e8e1bba68e07a36e7f9afc792e699a2 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou m...@nicolasgoaziou.fr Date: Wed, 15 Apr 2015 22:24:15 +0200 Subject: [PATCH] Implement Org linting * lisp/org-lint.el: New file. --- lisp/org-lint.el | 768 +++ 1 file changed, 768 insertions(+) create mode 100644 lisp/org-lint.el diff --git a/lisp/org-lint.el b/lisp/org-lint.el new file mode 100644 index 000..c818ff1 --- /dev/null +++ b/lisp/org-lint.el @@ -0,0 +1,768 @@ +;;; org-lint.el --- Linting for Org documents-*- lexical-binding: t; -*- + +;; Copyright (C) 2015 Free Software Foundation + +;; Author: Nicolas Goaziou m...@nicolasgoaziou.fr +;; Keywords: outlines, hypermedia, calendar, wp + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see http://www.gnu.org/licenses/. + +;;; Commentary: + +;; This 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 +;; - SETUPFILE keywords with non-existent file parameter +;; - INCLUDE keywords with wrong link parameter +;; - 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 + + +;;; Code: + +(require 'cl-lib) +(require 'org-element) +(require 'ox) +(require 'ob) + + +;;; Checkers + +(cl-defstruct (org-lint-checker (:copier nil)) + (name
Re: [O] [RFC] Org linting library
Marco Wahl marcowahls...@gmail.com writes: I think it's too much that org-lint tries to follow ssh links. It doesn't follow remote paths. 2278 low Link to non-existent local file ///ssh:root@127.0.0.1#:/etc/httpd/conf/httpd.conf ^ ^^^ There's a bug in the parser, which doesn't know how to handle /ssh:root@127.0.0.1#:/etc/httpd/conf/httpd.conf. It prefixes it with //, turning it into ///ssh:root@127.0.0.1#:/etc/httpd/conf/httpd.conf. Then `org-lint' thinks it's a local file. The problem should be fixed in master, so you need to update Org. Thanks for the feedback. Regards,
[O] [RFC] Org linting library
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 Goaziou0x80A93738 From 8324f1422953caab5566950f989e95fd4325a0b0 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou m...@nicolasgoaziou.fr Date: Wed, 15 Apr 2015 22:24:15 +0200 Subject: [PATCH] Implement Org linting * lisp/org-lint.el: New file. --- lisp/org-lint.el | 681 +++ 1 file changed, 681 insertions(+) create mode 100644 lisp/org-lint.el diff --git a/lisp/org-lint.el b/lisp/org-lint.el new file mode 100644 index 000..009a503 --- /dev/null +++ b/lisp/org-lint.el @@ -0,0 +1,681 @@ +;;; org-lint.el --- Linting for Org documents-*- lexical-binding: t; -*- + +;; Copyright (C) 2015 Free Software Foundation + +;; Author: Nicolas Goaziou m...@nicolasgoaziou.fr +;; Keywords: outlines, hypermedia, calendar, wp + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see http://www.gnu.org/licenses/. + +;;; Commentary: + +;; This 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
Re: [O] [RFC] Org linting library
Hi! Nicolas Goaziou m...@nicolasgoaziou.fr writes: The following library implements linting for Org syntax. The sole public function is `org-lint', which see. Great, thanks a lot. Already found some issues with some org-files. 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. Cool. Feedback welcome. I think it's too much that org-lint tries to follow ssh links. This slowed down the org-linting considerably in my case. #v+ 2278 low Link to non-existent local file ///ssh:root@127.0.0.1#:/etc/httpd/conf/httpd.conf #v- My 2ct, Marco -- http://www.wahlzone.de GPG: 0x49010A040A3AE6F2
Re: [O] [RFC] Org linting library
On Sun, 19 Apr 2015, Nicolas Goaziou wrote: Hello, The following library implements linting for Org syntax. The sole public function is `org-lint', which see. Nice! Comments below. Internally, the library defines a new structure: `org-lint-checker', with the following slots: [snip] Checks currently implemented are: - duplicates CUSTOM_ID properties - duplicate NAME values - duplicate targets - duplicate footnote definitions - orphaned affiliated keywords This generates an orphaned keyword warning, but seems innocuous and is what babel renders. #+NAME: abc #+BEGIN_SRC emacs-lisp nil #+END_SRC #+RESULTS: abc - obsolete affiliated keywords - missing language in src blocks - NAME values with a colon - wrong header arguments in src blocks IFF the header args are in the #+BEGIN_SRC line. #+HEADER lines and header-arg properties are not screened AFAICS. [snip] Chuck
Re: [O] [RFC] Org linting library
Hi, Nicolas Goaziou m...@nicolasgoaziou.fr writes: 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. It looks like a great tool. Especially given the fact that the org format still seems to be developing. Anyway, some very premature notes: One venue that may worth pursuing is better error messages during export, when links do not exist. E.g. after a link fails to resolve, an org-lint buffer is opened to ease tracking down the error. Perhaps, org-lint should also check that INCLUDE keywords correctly resolves, e.g. whether #section exits in file.org: #+INCLUDE: file.org::#section Perhaps that would induce nasty recursions, though... Thanks, Rasmus -- Enough with the bla bla!
Re: [O] [RFC] Org linting library
Rasmus ras...@gmx.us writes: It looks like a great tool. Especially given the fact that the org format still seems to be developing. Indeed. We can use it as another channel for syntax deprecation. Anyway, some very premature notes: One venue that may worth pursuing is better error messages during export, when links do not exist. E.g. after a link fails to resolve, an org-lint buffer is opened to ease tracking down the error. I think the error message during export is as good as the one provided by `org-lint', minus the line and the jump. Perhaps, org-lint should also check that INCLUDE keywords correctly resolves, e.g. whether #section exits in file.org: #+INCLUDE: file.org::#section Good idea. I implemented it along with a check for SETUPFILE keywords. Updated file attached. Perhaps that would induce nasty recursions, though... `org-lint' only checks current document, it doesn't enter INCLUDE files, so there's no danger here. Thanks for the feedback. Regards, From 1b182320599a435de7ab85f64ba984d1e5ef4502 Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou m...@nicolasgoaziou.fr Date: Wed, 15 Apr 2015 22:24:15 +0200 Subject: [PATCH] Implement Org linting * lisp/org-lint.el: New file. --- lisp/org-lint.el | 748 +++ 1 file changed, 748 insertions(+) create mode 100644 lisp/org-lint.el diff --git a/lisp/org-lint.el b/lisp/org-lint.el new file mode 100644 index 000..a514b8b --- /dev/null +++ b/lisp/org-lint.el @@ -0,0 +1,748 @@ +;;; org-lint.el --- Linting for Org documents-*- lexical-binding: t; -*- + +;; Copyright (C) 2015 Free Software Foundation + +;; Author: Nicolas Goaziou m...@nicolasgoaziou.fr +;; Keywords: outlines, hypermedia, calendar, wp + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see http://www.gnu.org/licenses/. + +;;; Commentary: + +;; This 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 +;; - SETUPFILE keywords with non-existent file parameter +;; - INCLUDE keywords with wrong link parameter +;; - special properties in properties drawer +;; - obsolete syntax for PROPERTIES drawers +;; - missing definition for footnote references +;; - missing reference for footnote definitions +;; -