Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Markdown linter integration #49

Closed
superkhau opened this issue Sep 14, 2016 · 29 comments
Closed

Markdown linter integration #49

superkhau opened this issue Sep 14, 2016 · 29 comments
Assignees
Labels

Comments

@superkhau
Copy link
Contributor

superkhau commented Sep 14, 2016

Come up with a proposal to answer the following:

  • What linter to use
  • General Usage
    • Ad hoc (ie. npm run lint)
    • CI (ie. posttest: npm run lint)
  • List of things to do during the actual tasks (ie. update readme with ad hoc usage instructions for loopback.io repo, submit PR with dep/integration with remark-lint, etc)
@Sequoia
Copy link
Contributor

Sequoia commented Oct 5, 2016

@crandmck pointed me to me this ticket as something I might be able to help with. What's the specific goal/deliverable here?

Is it: Create a script that reads & validates (lints) the top level README.md files across all strongloop repos?

@crandmck
Copy link
Contributor

crandmck commented Oct 5, 2016

@superkhau ^

@superkhau
Copy link
Contributor Author

superkhau commented Oct 6, 2016

@Sequoia Start with loopback.io files. We can decide after that trial run to see if we want to integrate the script into each LB repo afterwards based on your discoveries (and standards you decide upon in the configuration of remark-lint -- we can discuss more during the review of your PR to loopback.io -- cc me in that PR).

@superkhau
Copy link
Contributor Author

@Sequoia Please reference your PR to this issue too.

@crandmck
Copy link
Contributor

crandmck commented Oct 6, 2016

To clarify: the point of this exercise was to detect and resolve layout errors in loopback.io due to poorly-formatted markdown. Very little of that exists in the "regular" markdown files in pages directory of loopback.io.

Far more useful would be to correct problems in the READMEs being pulled into the docs from other repos (repos.json lists them). For example: http://loopback.io/doc/en/lb2/Tutorial-android-getting-started.html (list at end of document does not layout correctly) and http://loopback.io/doc/en/lb2/Tutorial-access-control.html (headings not formatted correctly).

@Sequoia Sequoia self-assigned this Oct 6, 2016
@Sequoia
Copy link
Contributor

Sequoia commented Oct 6, 2016

mdl uses Kramdown (and looks like it could do the job). Noting that here in case there are issues with remark-lint (which uses remark). Moving forward with remark-lint because while this repo does already depend on ruby, this particular task (extra-repo READMEs) already uses JS (get-readmes).

@Sequoia
Copy link
Contributor

Sequoia commented Oct 6, 2016

Starting point: linting _includes/readmes:

remark ./_includes/readmes 745 warnings

_includes/readmes/loopback-example-kv-connectors.md
      1:27-1:72  warning  Don’t use literal URLs without angle brackets         no-literal-urls              remark-lint
            9:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           10:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-android-getting-started.md
            9:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           10:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
     12:1-12:55  warning  Marker style should be `.`                            ordered-list-marker-style    remark-lint
           12:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           12:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
     13:1-13:52  warning  Marker style should be `.`                            ordered-list-marker-style    remark-lint
           13:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           13:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
     14:1-14:44  warning  Marker style should be `.`                            ordered-list-marker-style    remark-lint
           14:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           14:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
     15:1-15:38  warning  Marker style should be `.`                            ordered-list-marker-style    remark-lint
           15:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           15:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
           16:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
     17:1-17:26  warning  Marker style should be `.`                            ordered-list-marker-style    remark-lint
           17:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           17:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
     18:1-18:62  warning  Marker style should be `.`                            ordered-list-marker-style    remark-lint
           18:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           18:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
     19:1-19:74  warning  Marker style should be `.`                            ordered-list-marker-style    remark-lint
           19:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           19:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
     20:1-20:39  warning  Marker style should be `.`                            ordered-list-marker-style    remark-lint
           20:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           20:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
           21:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           24:5  warning  Incorrect indentation before bullet: remove 2 spaces  list-item-bullet-indent      remark-lint
           25:5  warning  Incorrect indentation before bullet: remove 2 spaces  list-item-bullet-indent      remark-lint
           26:5  warning  Incorrect indentation before bullet: remove 2 spaces  list-item-bullet-indent      remark-lint
           30:5  warning  Incorrect indentation before bullet: remove 2 spaces  list-item-bullet-indent      remark-lint
           31:5  warning  Incorrect indentation before bullet: remove 2 spaces  list-item-bullet-indent      remark-lint
           32:5  warning  Incorrect indentation before bullet: remove 2 spaces  list-item-bullet-indent      remark-lint
           36:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           37:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           38:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           39:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           40:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           41:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint

_includes/readmes/loopback-example-middleware.md
            9:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-angular-live-set.md
           66:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           66:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           67:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           67:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           68:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           68:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           72:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           72:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           73:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           73:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           74:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           74:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint

_includes/readmes/loopback-example-access-control.md
           14:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           14:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           15:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           15:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           16:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           16:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           17:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           17:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           26:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           27:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           28:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           29:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           33:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           34:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           35:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           36:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           37:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           45:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           46:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           57:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           58:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           59:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           60:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           61:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           62:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           63:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           64:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           65:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           66:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           67:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           68:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           69:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           70:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           71:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           72:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           73:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           74:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           75:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           76:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           77:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           78:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           79:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           80:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           81:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           82:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           83:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           84:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           85:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           86:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           87:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          101:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          102:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          103:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          109:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          110:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          111:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          112:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          113:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          114:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          115:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          116:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          117:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          118:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          119:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          120:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          121:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          122:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          123:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          124:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          125:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          126:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          127:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          128:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          129:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          137:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          139:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          141:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          143:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          167:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          168:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          169:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          170:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          195:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          196:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          197:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          198:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          199:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          200:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          201:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          202:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          203:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          204:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          205:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          206:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          207:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          208:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          209:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          210:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          211:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          212:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          213:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          214:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          215:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          216:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          217:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          218:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          219:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          220:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          221:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          222:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          223:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          224:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          225:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          226:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          227:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          228:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          229:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          230:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          231:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          232:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
  241:38-241:67  warning  Found reference to undefined definition               no-undefined-references      remark-lint
          243:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          244:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          245:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          246:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          247:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          248:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          249:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          250:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          251:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          252:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          253:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          254:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-mixins.md: no issues found
_includes/readmes/loopback-example-connector-remote.md
            9:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           10:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           11:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           13:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           14:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           14:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
    20:101-21:1  warning  Use two spaces for hard line breaks                   hard-break-spaces            remark-lint
    41:31-41:60  warning  Don’t use literal URLs without angle brackets         no-literal-urls              remark-lint
     43:7-43:50  warning  Don’t use literal URLs without angle brackets         no-literal-urls              remark-lint
           61:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           61:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           62:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           62:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           63:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           63:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           64:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           64:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint

_includes/readmes/loopback-example-angular.md
           17:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           18:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           22:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           23:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           24:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           25:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           26:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           27:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           28:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           29:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           30:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           38:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           39:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           51:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           52:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           53:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           54:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           55:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           56:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           57:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           58:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           59:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           71:1  warning  Missing caret in blockquote                           no-blockquote-without-caret  remark-lint
           72:1  warning  Missing caret in blockquote                           no-blockquote-without-caret  remark-lint
          114:1  warning  Missing caret in blockquote                           no-blockquote-without-caret  remark-lint

_includes/readmes/loopback-example-app-logic.md
           18:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           19:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           20:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           24:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           25:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           33:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           34:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           46:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           47:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           48:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           49:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           50:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           51:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           52:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           53:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           54:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           55:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           56:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           57:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           86:1  warning  Missing caret in blockquote                           no-blockquote-without-caret  remark-lint
          226:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
          227:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
          228:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
          232:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          233:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          234:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-passport.md
            5:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            6:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            7:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            8:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           15:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           16:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           22:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           23:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           24:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           28:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           29:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           30:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           45:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           46:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           47:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
    47:21-47:61  warning  Found reference to undefined definition               no-undefined-references      remark-lint
    47:21-47:61  warning  Use the trailing [] on reference links                no-shortcut-reference-link   remark-lint
           48:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           49:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           50:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           51:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           52:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           56:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           57:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          105:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          117:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          125:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          126:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          127:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-database-mysql.md
            5:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            6:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            7:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            8:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           14:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           15:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           16:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           17:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           18:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           19:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           20:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           47:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           48:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           49:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           66:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           67:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           85:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           86:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          122:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          123:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          124:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          125:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          126:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          127:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          128:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          129:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          130:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          131:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          132:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          133:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          134:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          135:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          136:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          193:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          194:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-connector-rest.md
       1:1-1:45  warning  Found unused definition                               no-unused-definitions        remark-lint
            5:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            6:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            7:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-connector-soap.md: no issues found
_includes/readmes/loopback-example-database-mssql.md
            5:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            6:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            7:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            8:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           14:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           15:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           16:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           17:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           18:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           19:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           20:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           47:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           48:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           49:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           66:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           67:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           85:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           86:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          122:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          123:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          124:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          125:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          126:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          127:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          128:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          129:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          130:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          131:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          132:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          133:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          134:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          135:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          136:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          193:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          194:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-remote.md: no issues found
_includes/readmes/loopback-example-isomorphic.md: no issues found
_includes/readmes/loopback-example-database-postgresql.md
            5:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            6:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            7:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            8:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           14:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           15:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           16:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           17:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           18:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           19:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           20:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           47:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           48:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           49:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           66:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           67:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           85:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           86:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          123:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          124:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          125:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          126:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          127:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          128:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          129:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          130:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          131:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          132:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          133:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          134:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          135:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          136:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          137:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          194:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          195:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-database.md
            5:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            6:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            7:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            8:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           14:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           15:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           16:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           17:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           18:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           19:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           20:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           47:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           48:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           49:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           66:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           67:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           85:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           86:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          123:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          124:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          125:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          126:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          127:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          128:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          129:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          130:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          131:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          132:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          133:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          134:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          135:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          136:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          137:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          197:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          198:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-database-oracle.md
            5:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            6:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            7:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            8:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           14:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           15:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           16:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           17:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           18:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           19:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           20:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           47:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           48:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           49:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           66:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           67:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          114:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          115:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          152:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          153:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          154:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          155:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          156:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          157:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          158:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          159:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          160:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          161:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          162:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          163:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          164:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          165:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          166:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          223:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          224:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-offline-sync.md
            8:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
            8:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
            9:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
            9:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           13:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           16:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           18:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           20:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           22:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           24:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           26:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           28:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           31:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           33:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           39:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           39:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           42:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           42:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           46:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           46:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           50:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           50:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           62:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           62:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           64:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           64:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           68:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           68:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           75:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           75:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           77:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           77:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           79:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           79:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           80:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           80:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           82:3  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           82:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           90:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           95:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           98:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
          109:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
          119:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
          133:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
          145:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
          151:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
          157:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint

_includes/readmes/loopback-example-pubsub.md
            6:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            7:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-relations.md
           18:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           19:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           23:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           24:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           25:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           26:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           34:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           35:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           45:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           46:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           47:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           58:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           59:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           60:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           61:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           62:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           63:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           64:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           65:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           66:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           67:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           68:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           69:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           70:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           71:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           72:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           73:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           74:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           75:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           76:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           77:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           78:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           79:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           80:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           81:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           82:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           83:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           84:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           85:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           86:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           87:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           88:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           89:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           90:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           91:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           92:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           93:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           94:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           95:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           96:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           97:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           98:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           99:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          100:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          101:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          102:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          103:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          104:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          105:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          106:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          107:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          108:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          109:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          110:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          111:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          112:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          113:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          114:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          115:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          116:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          117:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          118:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          119:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          120:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          121:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          122:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          123:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          124:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          125:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          126:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          127:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          128:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          129:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          130:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          131:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          132:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          133:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          134:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          135:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          136:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          137:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          138:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          139:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          140:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          141:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          142:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          143:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          144:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          145:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          146:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          147:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          148:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          149:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          150:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          152:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          153:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          154:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          155:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          156:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          157:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          158:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          159:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          160:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          161:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          162:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          163:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          164:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          165:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          166:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          202:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          203:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          204:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          205:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          206:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          214:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          215:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          216:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          217:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          218:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          219:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          220:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          252:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          263:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          278:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          279:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          280:7  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          281:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          282:9  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
  298:51-298:80  warning  Found reference to undefined definition               no-undefined-references      remark-lint
          302:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          303:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          304:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          305:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          306:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          307:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          308:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          309:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          310:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          311:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          312:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          313:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          314:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          315:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          316:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          317:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          318:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          319:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          322:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          323:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          326:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          327:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          330:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          331:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          332:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          333:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          334:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          335:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          338:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          339:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          340:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          341:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          342:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
          343:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-storage.md
    15:11-15:32  warning  Don’t use literal URLs without angle brackets         no-literal-urls              remark-lint

_includes/readmes/loopback-example-user-management.md
            9:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           10:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           11:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           12:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           13:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           14:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           17:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           18:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           19:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           22:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           23:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           24:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           25:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           26:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           27:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           37:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           38:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           39:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           40:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           41:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           42:5  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           56:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           65:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-example-xamarin.md
            5:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
            6:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           10:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           11:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           12:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           20:5  warning  Remove 1 space before this heading’s content          no-heading-content-indent    remark-lint
   22:92-22:125  warning  Don’t use literal URLs without angle brackets         no-literal-urls              remark-lint
           26:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           28:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
    35:59-35:92  warning  Don’t use literal URLs without angle brackets         no-literal-urls              remark-lint
           53:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           54:6  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           55:6  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           56:6  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           57:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           59:4  warning  Incorrect list-item indent: add 1 space               list-item-indent             remark-lint
           61:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           61:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
           62:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           62:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
    62:12-62:29  warning  Don’t pad `strong` with inner spaces                  no-inline-padding            remark-lint
           63:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           63:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
           64:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           64:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
           65:3  warning  Incorrect indentation before bullet: remove 3 spaces  list-item-bullet-indent      remark-lint
           65:6  warning  Incorrect list-item indent: remove 1 space            list-item-indent             remark-lint
           74:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           75:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint
           76:3  warning  Incorrect list-item indent: add 2 spaces              list-item-indent             remark-lint

_includes/readmes/loopback-getting-started-intermediate.md: no issues found
_includes/readmes/loopback-getting-started.md: no issues found
_includes/readmes/loopback-ios-getting-started.md
           10:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           11:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
           12:4  warning  Incorrect indentation before bullet: remove 1 space   list-item-bullet-indent      remark-lint
     25:1-25:53  warning  Found unused definition                               no-unused-definitions        remark-lint

⚠ 745 warnings

These are primarily list-item-indent type warnings, which don't actually break the markdown parser.

@Sequoia
Copy link
Contributor

Sequoia commented Oct 6, 2016

Still working on this... remark-lint ended up being very challenging to configure, it's configured in a style much like babel6: configs, presets, plugins, plugin-configs etc..

I had to do a bit of a deep-dive to figure out why remark-lint was not catching any of the faulty headings (I wasn't sure if I was configuring it wrong or what). Turns out the issue is a bit trickier: because remark parses the .md file to an AST and then passes it to plugins, if it doesn't recognize #welcome as a header, it doesn't get passed to header-checking rules. Basically the issue is sort of circular: it can't validate the markdown syntax because it has syntax problems.

#loopback-example-access-control

Get first child of AST: it's a "paragraph"

./node_modules/.bin/remark --tree-out -S _includes/readmes/loopback-example-access-control.md | json children[0]

{
  "type": "paragraph",
  "children": [
    {
      "type": "text",
      "value": "#loopback-example-access-control",
      "position": {
        "start": {
          "line": 1,
          "column": 1,
          "offset": 0
        },
        "end": {
          "line": 1,
          "column": 33,
          "offset": 32
        },
        "indent": []
      }
    }
  ],
  "position": {
    "start": {
      "line": 1,
      "column": 1,
      "offset": 0
    },
    "end": {
      "line": 1,
      "column": 33,
      "offset": 32
    },
    "indent": []
  }
}

# loopback-example-access-control

Get first child of AST: it's a "heading"

./node_modules/.bin/remark --tree-out -S _includes/readmes/loopback-example-access-control.md | json children[0]

{
  "type": "heading",
  "depth": 1,
  "children": [
    {
      "type": "text",
      "value": "loopback-example-access-control",
      "position": {
        "start": {
          "line": 1,
          "column": 3,
          "offset": 2
        },
        "end": {
          "line": 1,
          "column": 34,
          "offset": 33
        },
        "indent": []
      }
    }
  ],
  "position": {
    "start": {
      "line": 1,
      "column": 1,
      "offset": 0
    },
    "end": {
      "line": 1,
      "column": 34,
      "offset": 33
    },
    "indent": []
  }
}

👉 Remark-lint cannot, natively, detect this issue. I'll look into plugins that do, if I can't find one I'll discard it and switch tools.

@crandmck
Copy link
Contributor

crandmck commented Oct 6, 2016

OK, great...please do see if you can find a tool that detects the header issue (missing space after #), because I think we have a lot of those.

@superkhau
Copy link
Contributor Author

Should also try to see if the tool you're trying out supports a --fix option like ESLint to auto fix errors based on explicit rules from a config file.

@Sequoia
Copy link
Contributor

Sequoia commented Oct 7, 2016

Fenced code blocks in nested lists

This one is very tricky...

7 Space indent

OL > UL

1. Top level
  * Second level

       ```
       <android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/
       ```
  * Another on second level
  • ✅ Works with kramdown
  • also works on github

UL > UL

* Top level
  * Second level

       ```
       <android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/
       ```
  * Another on second level
  • Does not work with kramdown
  • works on github

4 spaces indent

OL > UL

1. Top level
  * Second level

    ```
    <android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/
    ```
  * Another on second level
  • Does not work with kramdown
  • works on github

UL > UL

* Top level
  * Second level

    ```
    <android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/
    ```
  * Another on second level
  • Works with kramdown
  • also works on github

leading/trailing newlines

  • For Kramdown to work there needs to be exactly 1 newline before in this case, none after (else it creates a new list).

Conclusions

  1. Github markdown parser is more permissive than the kramdown parser. This means we can expect issues if we're parsing md files that were written to work on github (unless we switch to use their parser).
  2. Fenced code blocks inside nested lists behave in a very nonintuitive & brittle way and are best avoided. The fact that switching the outside/parent list from UL to OL breaks fenced code parsing demonstrates just how brittle this feature is.

I'm not sure how to make it work across all the repos besides simply telling people to learn these rules or avoid fenced blocks in (nested) lists altogether.

@Sequoia
Copy link
Contributor

Sequoia commented Oct 7, 2016

I'm still working on finding a combination of rules that would detect this issue.

@Sequoia
Copy link
Contributor

Sequoia commented Oct 7, 2016

I do not believe there's any combination of rules that will detect the fenced code block issue (using markdownlint which I'm using because it can detect the #no space header issue).

@Sequoia
Copy link
Contributor

Sequoia commented Oct 7, 2016

Newline missing before list items

This was present in the loopback-android-getting-started README:

1. Import Google Play services library project into your workspace. The
  project is located inside the directory where you have installed i
  the Android SDK.
    * Run File &gt; Import
    * Select Android &gt; Existing Android Code Into Workspace
    * Go to
    ```
    <android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/
    ```
    * Select google-play-services_lib for import
    * Check "Copy projects into workspace"
    * Click "Finish".

  See this page for more details:
  [Set Up Google Play Services SDK](http://developer.android.com/google/play-services/setup.html)
 1. Add google-play-services\_lib as a build dependency of the Guide Application
    * In the Package Explorer, select LoopbackGuideApplication
    * Run File &gt; Project Properties
    * Select Android
    * In the Library frame, click on "Add..." and select google-play-services_lib

That bit in the middle "See this page for more details" breaks the list rendering starting with "Add google-play-services...", even if the <android-sdk> fenced block is removed.

Thoughts

Complex lists

I'm not sure what the intention was here: was "See this page" supposed to be part of "Click 'finish'" list item, or "Import Google Play" list item?? Or is the following 1. supposed to be starting a new list. Regardless of the intention, I believe the take-away is:

Authors must avoid complex nested list structures when creating markdown files we wish to use Kramdown.

Linting markdown in general

Markdown's strength, that it's terse, forgiving, implicit & easy to write, is also its weakness here. The following is not "invalid" markdown:

this will stop the list on the next line from rendering properly
1. This is just some text as far as markdown is concerned
2. This is more text that will display, all on one line with the above

It is valid markdown that renders the following:

this will stop the list on the next line from rendering properly 1. This is just some text as far as markdown is concerned 2. This is more text that will display, all on one line with the above

Note that github markdown parser creates a new <p> tag for each newline so while it doesn't create an <ol> it *will put each item on its own line/in it's own <p> tag*

Basically, there's very little that qualifies as "invalid markdown," just "unrecognized markdown." It's a bit of a Catch 22 because either

  1. The markdown is somehow recognizable 👉 parser would handle it properly
  2. The markdown is not recognizable 👉 parser can't recognize 👉 linter can't recognize

Conclusions

  • Creating completely lint-free markdown does not guarantee that it renders as intended
  • Markdown with "lint" is not necessarily broken/rendering incorrectly

To rephrase, linting cannot reliably catch all issues and it will report false-positives (wrt. rendering-- if we enforce a strict style the second issue is moot).

  • Bringing all READMEs into compliance with the markdown linters rules will require updates most of the readmes (29 of 31 have "issues").
  • If we want to apply this to project readmes, realistically it will need to be checked/enforced on each separate repo. Waiting 'til the readme is pulled to loopback.io to catch the issue & requesting an update is very unlikely to work.
  • Use HTML if you want a fancy nested list

Recommendation

While linting isn't guaranteed to catch issues, a 100% lint-free file is less likely to have them.

  1. Put this linter in place for now on this repo for safe-keeping but don't have it run automatically.
  2. Consider creating a commit-check hook that runs markdown files thru a set of rules & attaching it to one or two repos as a pilot 👈 this is the only long-term solution.

@Sequoia
Copy link
Contributor

Sequoia commented Oct 7, 2016

Working version

For the record, making that list completely lint-free did cause it to render as expected (with the major ⚠️ caveat that it did not help me get the correct indent on the fenced code block in nested list, I got that from trial and error).

# loopback-android-getting-started

LoopBack mobile application to show developers how to use
LoopBack Open Node.js Mobile API Middle tier.

## Setting up the Development Environment

1. Install [Eclipse Android Development Tools](http://developer.android.com/sdk/index.html)

1. Open Window &gt; Android SDK Manager, make sure you have these modules
  installed:

   * Tools &gt; Android SDK Platform-tools 18 or newer
   * Tools &gt; Android SDK Build-tools 18 or newer
   * Android 4.3 (API 18) &gt; SDK Platform
   * Extras &gt; Google Play Services

1. Import the Android project in this directory:

   * Run File &gt; Import
   * Select Android &gt; Existing Android Code Into Workspace
   * Choose the directory where you have the Getting Started application.
   * Select LoopBackExample for import

1. Import Google Play services library project into your workspace.
   The project is located inside the directory where you have installed
   the Android SDK.

   * Run File &gt; Import
   * Select Android &gt; Existing Android Code Into Workspace
   * Go to

     ```xml
     <android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib/
     ```

   * Select google-play-services_lib for import
   * Check "Copy projects into workspace"
   * Click "Finish".

   See this page for more details:
   [Set Up Google Play Services SDK](http://developer.android.com/google/play-services/setup.html)

1. Add google-play-services\_lib as a build dependency of the Guide Application

   * In the Package Explorer, select LoopbackGuideApplication
   * Run File &gt; Project Properties
   * Select Android
   * In the Library frame, click on "Add..." and select google-play-services_lib

1. Obtain an API key for Google Maps Android API v2
   [instructions](https://developers.google.com/maps/documentation/android/start#obtaining_an_api_key)
   and enter it into AndroidManifest.xml.

---

[More LoopBack examples](https://github.com/strongloop/loopback-example)

So perhaps the organization should enforce markdown style rules across all repos: while it would be more work for authors, it is likely to reduce parsing issues.

@crandmck
Copy link
Contributor

crandmck commented Oct 7, 2016

Thanks for chasing this all down @Sequoia.

Your findings mostly align with my experience, in that there are lots of wrinkles to how GH/Jekyll handles markdown, especially around lists. In general, I do think we need to be able to use code blocks in lists (ordered and unordered), but I also think it's fine if we have to fix these manually.

If we want to apply this to project readmes, realistically it will need to be checked/enforced on each separate repo. Waiting 'til the readme is pulled to loopback.io to catch the issue & requesting an update is very unlikely to work.

That's fine by me, and I think it's the most realistic scenario. Not sure how @superkhau feels.

Use HTML if you want a fancy nested list.

It depends on what you mean by "fancy", but this is probably OK. There are often other ways to work around it, too (put code blocks in a separate section and link to it, et. al.)

In general, in the loopback.io doc content (i.e. md files in pages/en/lb2) I've been able to deal with the oddities of markdown parsing/layout fairly well "manually" so I don't think we need to run the linter on those files. The other repo READMEs are another matter.

@superkhau
Copy link
Contributor Author

superkhau commented Oct 8, 2016

@crandmck @Sequoia I feel we need to cater for GitHub based workflows and not Jekyll. The contributors all know GHFM. Maybe there is a GHFM->Kramdown converter? Spike on more libs?

  1. GHFM as first class citizen
  2. If not possible, take notes in the loopback-knowledge-base so the doc team knows about the quirks and manually fixes for now (and us devs can see the pains and hoops that you guys need to jump over)
  3. We can then look into/spike on more libs that do GHFM to Kramdown conversions or maybe write a lib that does that conversion for us

This way, no changes are required to any dev workflows and you guys can have the looks you want for public consumption.

So perhaps the organization should enforce markdown style rules across all repos: while it would be more work for authors, it is likely to reduce parsing issues.

I would prefer that we do not have to go down this route (don't want to make all devs learn yet another format on top of the standard GHFM -- this includes all the explaining we have to do during reviews).

@Sequoia
Copy link
Contributor

Sequoia commented Oct 10, 2016

Summary: Use Github’s markdown parser so behavior is consistent from GH to Jeyll.

Thanks for the info @superkhau! With those priorities in mind, here are my thoughts:

Markdown has no formal standard, so each parser has its own de-facto standard style. It’s best therefore to treat the parser as the standard.

Building a tool to translate or transform one style to another would, in my opinion, be a significant undertaking and probably not worth the effort. It would be like writing ZSH scripts then writing a script to translate them to BASH: most people just “pick one [shell] and stick with it.” That’s what I think makes the most sense here: pick one [parser] and use it in all places.

This line of thinking leads to the conclusion that we should change our Jekyll site to match what Github does, as we can’t do the opposite. Specifically, Github uses markup to parse markdown, where we use kramdown. I am researching using “markup” with jekyll now, I imagine it’s possible.

This solution may cause some issues with existing pages on the site. Switching to GH/markup might necessitate updating some existing pages on our Jekyll site. The way I see it we’re going to have to update our style in one place or another, so this may just be necessary.

I'm going to look into the viability of this solution. Failing this, I can just document the known quirks per step 2 above (this would be a "write them down as you find them" process). Let me know if you'd like me to look into a scripted solution.

Additional Notes

Side note: One of the original issues (headings) is fixed by commenting out input: GFM from _config.yml. This causes a different issue (with fenced code blocks) however, so changing that setting doesn’t appear to be a quick solution.

@crandmck
Copy link
Contributor

Thanks again Sequoia for looking into this...

If the diffs between kramdown and GFM are causing an issue, I think we could configure kramdown to parse markdown as GFM by using the gfm_quirks config option (cf https://help.github.com/articles/configuring-jekyll/).

However, before we spend any more time on this, I think it's important to remember the purpose of this exercise (in my view anyway): to ensure that the markdown files that we "fetch" from other repos layout properly in the docs as well as on GitHub and npm. At this point, it would take probably a total of a couple of hours to just manually edit all the READMEs in question and ensure they work correctly everywhere.

Yes, having an automated process for this would be nice, but if requires a lot more effort or requires us to make significant changes to other parts of the docs, I don't think it's worth it. Markdown is not code... and if there are minor diffs that are not visible to the viewer, it doesn't really matter IMHO.

@Sequoia
Copy link
Contributor

Sequoia commented Oct 11, 2016

@crandmck I'm happy to do that checking/editing, I can start right away! I hadn't considered that because I'd taken from this discussion that "requiring devs on different repos to change their readmes is a no-go." I can go ahead and do that editing & start sending PRs.

A couple more observations/thoughts:

  1. Changing the kramdown config to gfm:true (which it already is) fixes the fenced code block issue (one of them) but breaks the lists. Setting it to false does the opposite. So that setting alone does not actually create consistency with the Github parser or solve our issues (it solves some, creates others).
  2. I tried using the redcarpet markdown parser (what GH uses) and it does cause rendering to be consistent with github (i.e. fixes the external readme issues). It causes problems in a few cases in the existing codebase, the main one I've found being that markdown="1" no longer works to signal that markdown inside an HTML tag should be parsed as markdown. This is a known departure from the original standard which redcarpet does not follow. (Redcarpet does seem to parse markdown content in inline elements, so span but not div or td).
  3. A friend pointed out to me that the markdown used in these examples/issues deviates from what's specified in The Blog Post that serves as a de-facto "standard" for markdown. Specifically, lists are indented 1 space universally, then 3 spaces for level 1 indent etc., where the spec says "4 spaces for nested list" & specifies some other things more clearly (newlines before/after code blocks e.g.). Conforming to that "standard" resolved a lot of the issues. (Read: this markup was sloppily/permissively written in the first place; avoiding this can help us avoid some issues. think "posix")

Possible long-term solution

  1. Switch to redcarpet parser for jekyll site
  2. Go "all HTML" inside template HTML blocks. So, in those cases in which you need to create a complex table with html (corner case?), don't put markdown in there.

@Sequoia
Copy link
Contributor

Sequoia commented Oct 11, 2016

For now I'll work on sending PRs to offending repos.

@crandmck
Copy link
Contributor

OK, thanks @Sequoia.

Certainly cleaning up READMEs manully is NOT a "no go"... I just think @superkhau rightly was looking for a way to automate it. My point is just that it's relatively straightforward (the number of files and corrections is not that huge), so perhaps the easiest way to achieve our high-level goal is to "just do it" and not spend a lot of time on the intricacies of markdown parsers and linting.

I tried using the redcarpet markdown parser (what GH uses) and it does cause rendering to be consistent with github (i.e. fixes the external readme issues). It causes problems in a few cases in the existing codebase, the main one I've found being that markdown="1" no longer works to signal that markdown inside an HTML tag should be parsed as markdown.

IMHO this would be a problem, because we have a ton of "include" templates (note, warning, etc) that use markdown="1" and many uses of them would break without it.

@superkhau
Copy link
Contributor Author

superkhau commented Oct 12, 2016

@crandmck @Sequoia Let's agree on the vision before deciding on the solutions:

  • GFM as first class citizen whenever possible
  • Document edge cases where GFM can't be used with why and what the workaround for that particular repo/set of repos are
  • Automate if possible, if not then manual intervention as described by @crandmck is possible, but must be documented since these are technically edge cases (and will help us look into future solutions/fixes/linter updates)
  • As long as you have a style guide that the documentation team maintains (ie. both of you keep up to date and a link to where community can read up on to follow), we devs can follow suit -- you guys are SMAs of the doc site formatting quirks -- we're ok with blindly following your conventions as long as we have something to refer to)
  • The linter is to aid with the conventions decided by the doc team (if the linter doesn't do what you want, find a better linter or manually intevene as suggested by @crandmck)

We should create a document in KB with those mission statements and I think @Sequoia should add to that document with some proposals with pros/cons of each then we can decide on which route to go with a short hangout.

@crandmck @Sequoia Thoughts?

@Sequoia
Copy link
Contributor

Sequoia commented Oct 12, 2016

@superkhau That sounds good.

One key point: It's not a 100% solution, but in many of the cases I've seen, adhering strictly to the rules set out in the original markdown "spec" eliminates most issues. For example, github permits indenting sub-lists with 2 spaces but if you use 4 per the spec* the problems go away.

It's hard to target Redcarpet ("GFM") as "first class" because it is the most permissive of the parsers in our system, so what it accepts frequently does work the same for Kramdown.

Possible approaches

  1. Pick a linter with strict rules and make it law. Because neither parser has a "standard," whatever we settle on will necessarily be a 3rd tool. (Kramdown,Redcarpet,Linter : Bash,Zsh,POSIX).
  2. Let people write their readmes & fix problems as they come up. This is the cheapest solution & will probably work fine.
  3. Compile a list of known issues as they come up & point to it from the various CONTRIBUTING.md files so people can find & reference it. Not automated, inexpensive, complements (2)

My recommendation for immediate next steps

While I have not found a silver bullet solution and presumably more research could be done, I think I have learned enough to be confident there is no silver bullet. I am happy to keep polishing a long-term solution but I'm sure @crandmck is eager the problem to be fixed & for me to move on to other work. Here's how I plan to move forward for now:

  1. Go thru all the "readme" derived pages in the jekyll site looking for issues
  2. As I encounter them
    1. Fix & send a PR to the offending repo
    2. Note the quirk/issue & a recommendation for avoiding it in the KB (not 100% sure where this is by the way)

This will solve our immediate problem as well as give us a more comprehensive view of how significant this issue is.

* it's referring to multiple paragraphs in lists but it effectively refers to any type of block level element in a list: "List items may consist of multiple paragraphs. Each subsequent paragraph in a list item must be indented by either 4 spaces or one tab:"

@Sequoia
Copy link
Contributor

Sequoia commented Oct 12, 2016

Also, I'm in the office today so please let me know if you'd like to call-- I think the thread's gotten long enough that real-time hashing-out is advisable at this point. 😸

Sequoia added a commit to Sequoia/loopback-example-kv-connectors that referenced this issue Oct 12, 2016
Sequoia added a commit to Sequoia/loopback-example-middleware that referenced this issue Oct 12, 2016
Sequoia added a commit to Sequoia/loopback-example-mixins that referenced this issue Oct 12, 2016
Sequoia added a commit to Sequoia/loopback-example-storage that referenced this issue Oct 12, 2016
Sequoia added a commit to Sequoia/loopback-example-user-management that referenced this issue Oct 12, 2016
@Sequoia
Copy link
Contributor

Sequoia commented Oct 12, 2016

I've reviewed all markdown files in repos.json and their output & sent PRs where needed.

superkhau pushed a commit to strongloop/loopback-example-access-control that referenced this issue Oct 12, 2016
superkhau pushed a commit to strongloop-community/loopback-android-getting-started that referenced this issue Oct 12, 2016
superkhau pushed a commit to strongloop-community/loopback-example-connector that referenced this issue Oct 12, 2016
superkhau pushed a commit to strongloop/loopback-example-database that referenced this issue Oct 12, 2016
superkhau pushed a commit to strongloop/loopback-example-kv-connectors that referenced this issue Oct 12, 2016
superkhau pushed a commit to strongloop-community/loopback-example-middleware that referenced this issue Oct 12, 2016
superkhau pushed a commit to strongloop/loopback-example-mixins that referenced this issue Oct 12, 2016
superkhau pushed a commit to strongloop/loopback-example-user-management that referenced this issue Oct 12, 2016
superkhau pushed a commit to strongloop/loopback-example-storage that referenced this issue Oct 12, 2016
@crandmck
Copy link
Contributor

crandmck commented Oct 13, 2016

Discussion among @Sequoia @superkhau and @crandmck came to following conclusions:

@bajtos FYI

@crandmck crandmck removed the #tob label Oct 13, 2016
crandmck pushed a commit that referenced this issue Apr 25, 2017
* Fix typo

* Fix a 404

* Point [hooks] to operation-hooks

* Link to issue #49

* Remove the video on user management

Its bad audio quality casts a negative
light on LoopBack

* Delist POST as a method for an Update
wanedenis pushed a commit to wanedenis/GettingStartedWithLoopbackJS that referenced this issue Jan 10, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants