[doc8]

# -----------------------------------------------------------------------
# Copyright 2017-2024 Open Networking Foundation Contributors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http:#www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# -----------------------------------------------------------------------
# SPDX-FileCopyrightText: 2017-2024 Open Networking Foundation Contributors
# SPDX-License-Identifier: Apache-2.0
# -----------------------------------------------------------------------
# Intent:
# -----------------------------------------------------------------------
    
## -----------------------------------------------------------------------
# $ doc8  -h
# 
# usage: doc8 [-h] [--config path] [--allow-long-titles] [--ignore code]
#             [--no-sphinx] [--ignore-path path] [--ignore-path-errors path]
#             [--default-extension extension] [--file-encoding encoding]
#             [--max-line-length int] [-e extension] [-v] [--version]
#             [path [path ...]]
# 
# Check documentation for simple style requirements.
# 
# What is checked:
#     - invalid RST format - D000
#     - lines should not be longer than 79 characters - D001
#       - RST exception: line with no whitespace except in the beginning
#       - RST exception: lines with http or https urls
#       - RST exception: literal blocks
#       - RST exception: rst target directives
#     - no trailing whitespace - D002
#     - no tabulation for indentation - D003
#     - no carriage returns (use unix newlines) - D004
#     - no newline at end of file - D005
# 
# positional arguments:
#   path                  Path to scan for doc files (default: current
#                         directory).
# 
# optional arguments:
#   -h, --help            show this help message and exit
#   --config path         user config file location (default: .config/doc8.ini, doc8.ini, tox.ini,
#                         pep8.ini, setup.cfg).
#   --allow-long-titles   allow long section titles (default: false).
#   --ignore code         ignore the given error code(s).
#   --no-sphinx           do not ignore sphinx specific false positives.
#   --ignore-path path    ignore the given directory or file (globs are
#                         supported).
#   --ignore-path-errors path
#                         ignore the given specific errors in the provided file.
#   --default-extension extension
#                         default file extension to use when a file is found
#                         without a file extension.
#   --file-encoding encoding
#                         set input files text encoding
#   --max-line-length int
#                         maximum allowed line length (default: 79).
#   -e extension, --extension extension
#                         check file extensions of the given type (default:
#                         .rst, .txt).
#   -q, --quiet           only print violations
#   -v, --verbose         run in verbose mode.
#   --version             show the version and exit.
## -----------------------------------------------------------------------

# verbose=1
    
extension       = rst, txt
ignore-path     = .venv, */.venv

# ignore-path-errors=/tmp/other_thing.rst;D001;D002
# voltha-helm-charts/voltha-infra/templates/NOTES.txt:12: D001 Line too long

max-line-length = 120

# [SEE ALSO]
# -----------------------------------------------------------------------
# https://doc8.readthedocs.io/en/latest/readme.html
# -----------------------------------------------------------------------
