#**************************************************************************
#*                                                                        *
#*                                 OCaml                                  *
#*                                                                        *
#*                 Damien Doligez, projet Gallium, INRIA                  *
#*                                                                        *
#*   Copyright 2015 Institut National de Recherche en Informatique et     *
#*     en Automatique.                                                    *
#*                                                                        *
#*   All rights reserved.  This file is distributed under the terms of    *
#*   the GNU Lesser General Public License version 2.1, with the          *
#*   special exception on linking described in the file LICENSE.          *
#*                                                                        *
#**************************************************************************

# Default behaviour, for if core.autocrlf isn't set
* text=auto

# It is not possible to wrap lines lines in .gitattributes files
.gitattributes typo.long-line=may

# Binary files
/boot/ocamlc binary
/boot/ocamllex binary
/boot/ocamldep binary
*.gif binary
*.png binary
*.tfm binary

/boot/menhir/parser.ml* -diff

# configure is a shell-script; the linguist-generated attribute suppresses
# changes being displayed by default in pull requests.
/configure text eol=lf -diff linguist-generated

# 'union' merge driver just unions textual content in case of conflict
#   http://krlmlr.github.io/using-gitattributes-to-avoid-merge-conflicts/
/.mailmap                merge=union

# We tried using 'union' for Changes and it did not work:
# instead of creating Changes conflict it would silently duplicate
# the lines involved in the conflict, which is arguably worse
#/Changes                 merge=union

# No header for text files (would be too obtrusive).
*.md                     typo.missing-header
README*                  typo.missing-header
*.adoc                   typo.missing-header
stdlib/*.mld             typo.missing-header
tools/mantis2gh_stripped.csv typo.missing-header

*.adoc                   typo.long-line=may

# Github templates and scripts lack headers, have long lines
/.github/**              typo.missing-header typo.long-line=may typo.very-long-line=may

/.mailmap                typo.long-line typo.missing-header typo.non-ascii
/.merlin                 typo.missing-header
/Changes                 typo.utf8 typo.missing-header
/release-info/News       typo.utf8 typo.missing-header
/INSTALL                 typo.missing-header
/LICENSE                 typo.very-long-line typo.missing-header
# tools/ci/appveyor/appveyor_build.cmd only has missing-header because
# dra27 too lazy to update check-typo to interpret Cmd-style comments!
/tools/ci/appveyor/appveyor_build.cmd       typo.very-long-line typo.missing-header typo.non-ascii
/tools/ci/appveyor/appveyor_build.sh        typo.non-ascii
/tools/ci/inria/bootstrap/remove-sinh-primitive.patch typo.prune
/release-info/howto.md                    typo.missing-header typo.long-line
/release-info/templates/*.md              typo.missing-header typo.very-long-line=may
# ignore auto-generated .depend files
.depend                  typo.prune
/.depend.menhir          typo.prune

# Makefiles may contain tabs
Makefile*                typo.tab=may

asmcomp/*/emit.mlp       typo.tab=may typo.long-line=may

# The build-aux directory contains bundled files so do not check it
build-aux                typo.prune

/manual                  typo.prune
/manual/**               typo.prune

# configure is generated so do not check it
configure                typo.prune

ocaml-variants.opam      typo.prune

emacs/*.el               typo.long-line=may
emacs/caml.el            typo.long-line=may typo.missing-header
emacs/COPYING            typo.prune
emacs/ocamltags.in       typo.non-printing

ocamldoc/**              typo.long-line=may
ocamldoc/Changes.txt     typo.missing-header
ocamldoc/ocamldoc.sty    typo.missing-header
ocamldoc/odoc_index.html typo.missing-header

otherlibs/win32unix/readlink.c    typo.long-line
otherlibs/win32unix/stat.c        typo.long-line
otherlibs/win32unix/symlink.c     typo.long-line

stdlib/hashbang     typo.white-at-eol typo.missing-lf

testsuite/tests/**                                      typo.missing-header typo.long-line=may
testsuite/tests/lib-bigarray-2/bigarrf.f                typo.tab
testsuite/tests/lib-unix/win-stat/fakeclock.c           typo.missing-header=false
testsuite/tests/misc-unsafe/almabench.ml                typo.long-line
testsuite/tests/tool-toplevel/strings.ml                typo.utf8
testsuite/tests/win-unicode/*.ml                        typo.utf8
testsuite/tests/asmgen/immediates.cmm                   typo.very-long-line
testsuite/tools/*.S                                     typo.missing-header
testsuite/tools/*.asm                                   typo.missing-header
testsuite/typing                                        typo.missing-header

# prune testsuite reference files
testsuite/tests/**/*.reference               typo.prune

# Expect tests with overly long lines of expected output
testsuite/tests/parsing/docstrings.ml        typo.very-long-line

# The normalisation tests have very specific line endings which mustn't be
# corrupted by git.
testsuite/tests/tool-ocamltest/norm*.reference binary

tools/magic                       typo.missing-header
tools/eventlog_metadata.in        typo.missing-header

# TODO we should fix the long-line errors in yacc/*.c
/yacc/*.[ch]         typo.very-long-line=may

menhir-bench.bash typo.missing-header typo.utf8

# bootstrap files produced by Menhir
/boot/menhir/** typo.long-line=may typo.very-long-line=may
/boot/menhir/** typo.missing-header=may
/boot/menhir/** typo.white-at-eol=may
/boot/menhir/** typo.utf8=may

# Line-ending specifications, for Windows interoperability
*.sh text eol=lf
*.sh.in text eol=lf
*.awk text eol=lf
*.m4 text eol=lf

# ocamltest hooks which are used in the testsuite
*.check-program-output text eol=lf
*.run text eol=lf

/tools/ci/appveyor/appveyor_build.cmd text eol=crlf

configure.ac text eol=lf
build-aux/compile text eol=lf
build-aux/config.guess text eol=lf
build-aux/config.sub text eol=lf
build-aux/install text eol=lf
build-aux/missing text eol=lf
ocamldoc/remove_DEBUG text eol=lf
ocamltest/getocamloptdefaultflags text eol=lf
ocamltest/ocamltest.org typo.long-line=may typo.missing-header
stdlib/Compflags text eol=lf
stdlib/sharpbang text eol=lf
tools/autogen text eol=lf
tools/ci/inria/remove-sinh-primitive.patch text eol=lf
tools/check-typo text eol=lf
tools/ci-build text eol=lf
tools/msvs-promote-path text eol=lf
tools/gdb-macros text eol=lf
tools/magic text eol=lf
tools/make-opcodes text eol=lf
tools/make-package-macosx text eol=lf
tools/ocaml-objcopy-macosx text eol=lf
tools/ocamlmktop.tpl text eol=lf
tools/ocamlsize text eol=lf
tools/pre-commit-githook text eol=lf
tools/markdown-add-pr-links.sh text eol=lf
runtime/caml/m.h.in text eol=lf
runtime/caml/s.h.in text eol=lf
runtime/caml/compatibility.h typo.long-line=may

# These are all Perl scripts, so may not actually require this
manual/tools/caml-tex text eol=lf
manual/tools/format-intf text eol=lf
manual/tools/htmlcut text eol=lf
manual/tools/htmltbl text eol=lf
manual/tools/htmlthread text eol=lf
manual/tools/texexpand text eol=lf

# Tests which include references spanning multiple lines fail with \r\n
# endings, so use \n endings only, even on Windows.
testsuite/tests/basic-modules/anonymous.ml text eol=lf
testsuite/tests/basic-more/morematch.ml text eol=lf
testsuite/tests/basic-more/robustmatch.ml text eol=lf
testsuite/tests/parsing/*.ml text eol=lf
testsuite/tests/docstrings/empty.ml text eol=lf
testsuite/tests/functors/functors.ml text eol=lf
testsuite/tests/tool-ocamlc-stop-after/stop_after_parsing_impl.ml text eol=lf
testsuite/tests/tool-ocamlc-stop-after/stop_after_parsing_intf.mli text eol=lf
testsuite/tests/tool-ocamlc-stop-after/stop_after_typing_impl.ml text eol=lf
testsuite/tests/tool-toplevel/error_highlighting.ml text eol=lf
testsuite/tests/tool-toplevel/error_highlighting_use4.ml text eol=lf
testsuite/tests/translprim/module_coercion.ml text eol=lf
testsuite/tests/typing-objects-bugs/pr3968_bad.ml text eol=lf
testsuite/tests/typing-ocamlc-i/pr7402.ml text eol=lf
testsuite/tests/typing-ocamlc-i/pervasives_leitmotiv.ml text eol=lf
testsuite/tests/typing-recmod/t12bad.ml text eol=lf
testsuite/tests/typing-safe-linking/b_bad.ml text eol=lf
testsuite/tests/warnings/w04.ml text eol=lf
testsuite/tests/warnings/w04_failure.ml text eol=lf
testsuite/tests/warnings/w32.ml text eol=lf

# These are forced to \n to allow the Cygwin testsuite to pass on a
# Windows-checkout
testsuite/tests/formatting/margins.ml text eol=lf
testsuite/tests/letrec-check/pr7706.ml text eol=lf
testsuite/tests/letrec-disallowed/disallowed.ml text eol=lf
testsuite/tests/letrec-disallowed/extension_constructor.ml text eol=lf
testsuite/tests/letrec-disallowed/float_block_allowed.ml text eol=lf
testsuite/tests/letrec-disallowed/float_block_disallowed.ml text eol=lf
testsuite/tests/letrec-disallowed/generic_arrays.ml text eol=lf
testsuite/tests/letrec-disallowed/lazy_.ml text eol=lf
testsuite/tests/letrec-disallowed/module_constraints.ml text eol=lf
testsuite/tests/letrec-disallowed/unboxed.ml text eol=lf
testsuite/tests/letrec-disallowed/pr7215.ml text eol=lf
testsuite/tests/letrec-disallowed/pr7231.ml text eol=lf
testsuite/tests/letrec-disallowed/pr7706.ml text eol=lf
testsuite/tests/lexing/uchar_esc.ml text eol=lf
testsuite/tests/match-exception-warnings/exhaustiveness_warnings.ml text eol=lf
testsuite/tests/tool-toplevel/pr7060.ml text eol=lf
testsuite/tests/typing-extension-constructor/test.ml text eol=lf
testsuite/tests/typing-extensions/extensions.ml text eol=lf
testsuite/tests/typing-extensions/open_types.ml text eol=lf
testsuite/tests/typing-objects/Exemples.ml text eol=lf
testsuite/tests/typing-objects/pr5619_bad.ml text eol=lf
testsuite/tests/typing-objects/pr6123_bad.ml text eol=lf
testsuite/tests/typing-objects/pr6907_bad.ml text eol=lf
testsuite/tests/typing-objects/Tests.ml text eol=lf
testsuite/tests/typing-pattern_open/pattern_open.ml text eol=lf
testsuite/tests/typing-private/private.ml text eol=lf
testsuite/tests/typing-recordarg/recordarg.ml text eol=lf
testsuite/tests/typing-short-paths/pr5918.ml text eol=lf
testsuite/tests/typing-sigsubst/sigsubst.ml text eol=lf
testsuite/tests/typing-typeparam/newtype.ml text eol=lf
testsuite/tests/typing-unboxed/test.ml text eol=lf
testsuite/tests/typing-unboxed-types/test.ml text eol=lf
testsuite/tests/typing-unboxed-types/test_flat.ml text eol=lf
testsuite/tests/typing-unboxed-types/test_no_flat.ml text eol=lf
testsuite/tests/typing-warnings/ambiguous_guarded_disjunction.ml text eol=lf
testsuite/tests/typing-warnings/application.ml text eol=lf
testsuite/tests/typing-warnings/coercions.ml text eol=lf
testsuite/tests/typing-warnings/exhaustiveness.ml text eol=lf
testsuite/tests/typing-warnings/pr6587.ml text eol=lf
testsuite/tests/typing-warnings/pr6872.ml text eol=lf
testsuite/tests/typing-warnings/pr7085.ml text eol=lf
testsuite/tests/typing-warnings/pr7115.ml text eol=lf
testsuite/tests/typing-warnings/pr7261.ml text eol=lf
testsuite/tests/typing-warnings/pr7297.ml text eol=lf
testsuite/tests/typing-warnings/pr7553.ml text eol=lf
testsuite/tests/typing-warnings/records.ml text eol=lf
testsuite/tests/typing-warnings/unused_types.ml text eol=lf
