Przeglądaj źródła

Set up pre-commit (#73)

Added here:

- .pre-commit-config.yaml
- docs/project/contribution_tools.md
- src/scripts/pre-commit-toc.js
- CONTRIBUTING.md
- proposals/* (just to switch TOC formats)

The rest consists of auto-generated fixes.

The switch from doctoc to markdown-toc is because doctoc wants to put a TOC in every file, whereas markdown-toc only does it if you have an insertion point.

Co-authored-by: Chandler Carruth <chandlerc@gmail.com>
Jon Meow 5 lat temu
rodzic
commit
f1e4323fda

+ 24 - 24
.github/workflows/publish-docs.yaml

@@ -2,32 +2,32 @@ name: Publish Carbon Documentation
 on:
 on:
   push:
   push:
     branches:
     branches:
-    - master
+      - master
 
 
 jobs:
 jobs:
   build:
   build:
     runs-on: [ubuntu-latest]
     runs-on: [ubuntu-latest]
     steps:
     steps:
-    - uses: actions/checkout@v2
-    - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
-      with:
-        version: '285.0.0'
-        project_id: ${{ secrets.GCP_PROJECT_ID }}
-        service_account_email: ${{ secrets.GCP_SA_EMAIL }}
-        service_account_key: ${{ secrets.GCP_SA_KEY }}
-        export_default_credentials: true
-    - uses: actions/setup-ruby@v1
-      with:
-        ruby-version: 2.6
-    - run: gcloud info
-    - name: Install bundler
-      run: gem install bundler
-      working-directory: src/jekyll
-    - name: Install jekyll and dependencies
-      run: bundle install --jobs 4 --retry 3
-      working-directory: src/jekyll
-    - name: Build HTML pages
-      run: make build
-      working-directory: src/jekyll
-    - name: Publish to www.carbon-lang.dev
-      run: gsutil cp -R src/jekyll/.gen-site/* gs://www.carbon-lang.dev/
+      - uses: actions/checkout@v2
+      - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
+        with:
+          version: '285.0.0'
+          project_id: ${{ secrets.GCP_PROJECT_ID }}
+          service_account_email: ${{ secrets.GCP_SA_EMAIL }}
+          service_account_key: ${{ secrets.GCP_SA_KEY }}
+          export_default_credentials: true
+      - uses: actions/setup-ruby@v1
+        with:
+          ruby-version: 2.6
+      - run: gcloud info
+      - name: Install bundler
+        run: gem install bundler
+        working-directory: src/jekyll
+      - name: Install jekyll and dependencies
+        run: bundle install --jobs 4 --retry 3
+        working-directory: src/jekyll
+      - name: Build HTML pages
+        run: make build
+        working-directory: src/jekyll
+      - name: Publish to www.carbon-lang.dev
+        run: gsutil cp -R src/jekyll/.gen-site/* gs://www.carbon-lang.dev/

+ 33 - 0
.pre-commit-config.yaml

@@ -0,0 +1,33 @@
+# See https://pre-commit.com for more information
+# See https://pre-commit.com/hooks.html for more hooks
+repos:
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v2.4.0
+    hooks:
+      - id: check-added-large-files
+      - id: check-case-conflict
+      - id: check-executables-have-shebangs
+      - id: check-merge-conflict
+      - id: check-symlinks
+      - id: check-yaml
+      - id: detect-private-key
+      - id: end-of-file-fixer
+      - id: mixed-line-ending
+        args: ['--fix=lf']
+      - id: trailing-whitespace
+  - repo: local
+    hooks:
+      - id: markdown-toc
+        name: markdown-toc
+        description: Runs https://github.com/jonschlinkert/markdown-toc
+        entry: src/scripts/pre-commit-toc.js
+        language: node
+        additional_dependencies: [markdown-toc]
+        files: .*\.md$
+        exclude: ^src/jekyll/theme/
+  # Prettier should be run late so that it can re-format any prior changes.
+  - repo: https://github.com/prettier/prettier
+    rev: 2.0.5
+    hooks:
+      - id: prettier
+        exclude: ^src/jekyll/theme/

+ 10 - 2
CONTRIBUTING.md

@@ -184,6 +184,14 @@ follow the Carbon documentation and coding styles.
   - Keep in mind that code contribution guidelines are incomplete while we start
   - Keep in mind that code contribution guidelines are incomplete while we start
     work on Carbon, and may change later.
     work on Carbon, and may change later.
 
 
+## pre-commit
+
+We use [pre-commit](/docs/project/contribution_tools.md#pre-commit) for
+automated checks, including formatting of documentation. Please see
+[contribution tools](/docs/project/contribution_tools.md) for more information.
+
+Please use pre-commit to simplify reviews.
+
 ## Style
 ## Style
 
 
 ### Google Docs and Markdown
 ### Google Docs and Markdown
@@ -191,8 +199,8 @@ follow the Carbon documentation and coding styles.
 Changes to Carbon documentation follow the
 Changes to Carbon documentation follow the
 [Google developer documentation style guide](https://developers.google.com/style).
 [Google developer documentation style guide](https://developers.google.com/style).
 
 
-Markdown files should additionally use [Prettier](https://prettier.io/) for
-formatting.
+Markdown files should additionally use
+[Prettier](/docs/project/contribution_tools.md#prettier) for formatting.
 
 
 Other style points to be aware of are:
 Other style points to be aware of are:
 
 

+ 3 - 1
docs/project/commenting_guidelines.md

@@ -25,7 +25,9 @@ always try to keep feedback, even when critical, constructive and supportive.
   - If your comment represents a significant change to the proposal, include a
   - If your comment represents a significant change to the proposal, include a
     list of pros and cons. Even if the author disagrees with the change, they
     list of pros and cons. Even if the author disagrees with the change, they
     can use those to document the alternative.
     can use those to document the alternative.
-  - Feel free to extract long side discussions to a Discourse Forum topic, but make sure any important conclusions or outcomes are reflected in either the GitHub comments or the change itself.
+  - Feel free to extract long side discussions to a Discourse Forum topic, but
+    make sure any important conclusions or outcomes are reflected in either the
+    GitHub comments or the change itself.
 
 
 - **Be supportive in your criticism.** The author may be receiving many
 - **Be supportive in your criticism.** The author may be receiving many
   comments, and we want to keep contributors motivated to respond.
   comments, and we want to keep contributors motivated to respond.

+ 64 - 0
docs/project/contribution_tools.md

@@ -0,0 +1,64 @@
+# Contribution tools
+
+<!--
+Part of the Carbon Language project, under the Apache License v2.0 with LLVM
+Exceptions. See /LICENSE for license information.
+SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+-->
+
+The Carbon language project has a number of tools used to assist in preparing
+contributions.
+
+## Table of contents
+
+<!-- toc -->
+
+- [pre-commit](#pre-commit)
+- [markdown-toc](#markdown-toc)
+- [Prettier](#prettier)
+  - [vim-prettier](#vim-prettier)
+
+<!-- tocstop -->
+
+## pre-commit
+
+We use [pre-commit](https://pre-commit.com) to run
+[various checks](/.pre-commit-config.yaml). This will automatically run
+important checks, including formatting.
+
+To set up pre-commit:
+
+- Follow the [installation instructions](https://pre-commit.com/#installation).
+- Enable per-repo: `pre-commit install`
+
+When modifying or adding pre-commit hooks, please run
+`pre-commit run --all-files` to see what changes.
+
+## markdown-toc
+
+**pre-commit enabled**: markdown-toc will be run by pre-commit, if installed.
+
+We use [markdown-toc](https://github.com/jonschlinkert/markdown-toc) to provide
+GitHub-compatible tables of contents for some documents.
+
+If run manually, specify `--bullets=-` to use Prettier-compatible bullets, or
+always run Prettier after markdown-toc.
+
+## Prettier
+
+**pre-commit enabled**: Prettier will be run by pre-commit, if installed.
+
+We use [Prettier](https://prettier.io/) for formatting. There is an
+[rc file](/.prettierrc) for configuration.
+
+### vim-prettier
+
+If you use [vim-prettier](https://github.com/prettier/vim-prettier), it may help
+to add to your `.virmc`:
+
+```
+let g:prettier#config#print_width = '80'
+let g:prettier#config#tab_width = '2'
+let g:prettier#config#use_tabs = 'false'
+let g:prettier#config#prose_wrap = 'always'
+```

+ 2 - 3
proposals/p0044.md

@@ -12,8 +12,7 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 
 
 ## Table of contents
 ## Table of contents
 
 
-<!-- START doctoc generated TOC please keep comment here to allow auto update -->
-<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
+<!-- toc -->
 
 
 - [Problem](#problem)
 - [Problem](#problem)
 - [Background](#background)
 - [Background](#background)
@@ -67,7 +66,7 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
     - [StackEdit](#stackedit)
     - [StackEdit](#stackedit)
   - [GitHub Markdown syntax highlighting](#github-markdown-syntax-highlighting)
   - [GitHub Markdown syntax highlighting](#github-markdown-syntax-highlighting)
 
 
-<!-- END doctoc generated TOC please keep comment here to allow auto update -->
+<!-- tocstop -->
 
 
 ## Problem
 ## Problem
 
 

+ 10 - 3
proposals/template.md

@@ -12,9 +12,16 @@ SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 
 
 ## Table of contents
 ## Table of contents
 
 
-<!-- START doctoc generated TOC please keep comment here to allow auto update -->
-<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
-<!-- END doctoc generated TOC please keep comment here to allow auto update -->
+<!-- toc -->
+
+- [TODO: Initial proposal setup](#todo-initial-proposal-setup)
+- [Problem](#problem)
+- [Background](#background)
+- [Proposal](#proposal)
+- [Details](#details)
+- [Alternatives considered](#alternatives-considered)
+
+<!-- tocstop -->
 
 
 ## TODO: Initial proposal setup
 ## TODO: Initial proposal setup
 
 

+ 28 - 0
src/scripts/pre-commit-toc.js

@@ -0,0 +1,28 @@
+#!/usr/local/bin/node
+
+/*
+Part of the Carbon Language project, under the Apache License v2.0 with LLVM
+Exceptions. See /LICENSE for license information.
+SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+*/
+
+/*
+Runs markdown-toc for pre-commits. This is necessary to handle multiple file
+arguments, which markdown-toc does not.
+
+Humans should generally use markdown-toc following the install instructions
+from https://github.com/jonschlinkert/markdown-toc.
+*/
+
+const mdtoc = require('markdown-toc');
+const fs = require('fs');
+
+const files = process.argv.slice(2);
+for (var i = 0; i < files.length; ++i) {
+  const oldContent = fs.readFileSync(files[i]).toString();
+  const newContent = mdtoc.insert(oldContent, { bullets: '-' });
+  if (oldContent != newContent) {
+    console.log(`Updating ${files[i]}`);
+    fs.writeFileSync(files[i], newContent);
+  }
+}

+ 0 - 0
src/scripts/update-label-access.js