summaryrefslogtreecommitdiffstats
path: root/third_party/python/yamllint/yamllint/rules/comments.py
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/python/yamllint/yamllint/rules/comments.py')
-rw-r--r--third_party/python/yamllint/yamllint/rules/comments.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/third_party/python/yamllint/yamllint/rules/comments.py b/third_party/python/yamllint/yamllint/rules/comments.py
new file mode 100644
index 0000000000..0122838f61
--- /dev/null
+++ b/third_party/python/yamllint/yamllint/rules/comments.py
@@ -0,0 +1,104 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2016 Adrien Vergé
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+"""
+Use this rule to control the position and formatting of comments.
+
+.. rubric:: Options
+
+* Use ``require-starting-space`` to require a space character right after the
+ ``#``. Set to ``true`` to enable, ``false`` to disable.
+* Use ``ignore-shebangs`` to ignore a
+ `shebang <https://en.wikipedia.org/wiki/Shebang_(Unix)>`_ at the beginning of
+ the file when ``require-starting-space`` is set.
+* ``min-spaces-from-content`` is used to visually separate inline comments from
+ content. It defines the minimal required number of spaces between a comment
+ and its preceding content.
+
+.. rubric:: Examples
+
+#. With ``comments: {require-starting-space: true}``
+
+ the following code snippet would **PASS**:
+ ::
+
+ # This sentence
+ # is a block comment
+
+ the following code snippet would **PASS**:
+ ::
+
+ ##############################
+ ## This is some documentation
+
+ the following code snippet would **FAIL**:
+ ::
+
+ #This sentence
+ #is a block comment
+
+#. With ``comments: {min-spaces-from-content: 2}``
+
+ the following code snippet would **PASS**:
+ ::
+
+ x = 2 ^ 127 - 1 # Mersenne prime number
+
+ the following code snippet would **FAIL**:
+ ::
+
+ x = 2 ^ 127 - 1 # Mersenne prime number
+"""
+
+
+import re
+
+from yamllint.linter import LintProblem
+
+
+ID = 'comments'
+TYPE = 'comment'
+CONF = {'require-starting-space': bool,
+ 'ignore-shebangs': bool,
+ 'min-spaces-from-content': int}
+DEFAULT = {'require-starting-space': True,
+ 'ignore-shebangs': True,
+ 'min-spaces-from-content': 2}
+
+
+def check(conf, comment):
+ if (conf['min-spaces-from-content'] != -1 and comment.is_inline() and
+ comment.pointer - comment.token_before.end_mark.pointer <
+ conf['min-spaces-from-content']):
+ yield LintProblem(comment.line_no, comment.column_no,
+ 'too few spaces before comment')
+
+ if conf['require-starting-space']:
+ text_start = comment.pointer + 1
+ while (comment.buffer[text_start] == '#' and
+ text_start < len(comment.buffer)):
+ text_start += 1
+ if text_start < len(comment.buffer):
+ if (conf['ignore-shebangs'] and
+ comment.line_no == 1 and
+ comment.column_no == 1 and
+ re.match(r'^!\S', comment.buffer[text_start:])):
+ return
+ elif comment.buffer[text_start] not in (' ', '\n', '\0'):
+ column = comment.column_no + text_start - comment.pointer
+ yield LintProblem(comment.line_no,
+ column,
+ 'missing starting space in comment')