# A collection of simple regexp-based rules that can be applied to content # to disambiguate languages with the same file extension. # # There two top-level keys: disambiguations and named_patterns. # # disambiguations - a list of disambiguation rules, one for each # extension or group of extensions. # extensions - an array of file extensions that this block applies to. # rules - list of rules that are applied in order to the content # of a file with matching extension. Rules are evaluated # until one of them matches. If none matches, no language # is returned. # language - Language to be returned if the rule matches. # pattern - Ruby-compatible regular expression that makes the rule # match. If no pattern is specified, the rule always match. # Pattern can be a string with a single regular expression # or an array of strings that will be merged in a single # regular expression (with union). # and - An and block merges multiple rules and checks that all of # of them must match. # negative_pattern - Same as pattern, but checks for absence of matches. # named_pattern - A pattern can be reused by specifying it in the # named_patterns section and referencing it here by its # key. # named_patterns - Key-value map of reusable named patterns. # # Please keep this list alphabetized. # --- disambiguations: - extensions: ['.1', '.2', '.3', '.4', '.5', '.6', '.7', '.8', '.9'] rules: - language: Roff Manpage and: - named_pattern: mdoc-date - named_pattern: mdoc-title - named_pattern: mdoc-heading - language: Roff Manpage and: - named_pattern: man-title - named_pattern: man-heading - language: Roff pattern: '^\.(?:[A-Za-z]{2}(?:\s|$)|\\")' - extensions: ['.1in', '.1m', '.1x', '.3in', '.3m', '.3p', '.3pm', '.3qt', '.3x', '.man', '.mdoc'] rules: - language: Roff Manpage and: - named_pattern: mdoc-date - named_pattern: mdoc-title - named_pattern: mdoc-heading - language: Roff Manpage and: - named_pattern: man-title - named_pattern: man-heading - language: Roff - extensions: ['.al'] rules: # AL pattern source from https://github.com/microsoft/AL/blob/master/grammar/alsyntax.tmlanguage - keyword.other.applicationobject.al - language: AL and: - pattern: '\b(?i:(CODEUNIT|PAGE|PAGEEXTENSION|PAGECUSTOMIZATION|DOTNET|ENUM|ENUMEXTENSION|VALUE|QUERY|REPORT|TABLE|TABLEEXTENSION|XMLPORT|PROFILE|CONTROLADDIN))\b' # Open-ended fallback to Perl AutoLoader - language: Perl - extensions: ['.as'] rules: - language: ActionScript pattern: '^\s*(?:package(?:\s+[\w.]+)?\s+(?:{|$)|import\s+[\w.*]+\s*;|(?=.*?(?:intrinsic|extends))(intrinsic\s+)?class\s+[\w<>.]+(?:\s+extends\s+[\w<>.]+)?|(?:(?:public|protected|private|static)\s+)*(?:(?:var|const|local)\s+\w+\s*:\s*[\w<>.]+(?:\s*=.*)?\s*;|function\s+\w+\s*\((?:\s*\w+(?:\s*:\s*[\w<>.]+)?,?)*\)(?:\s*:\s*[\w<>.]+)?))' - extensions: ['.asc'] rules: - language: Public Key pattern: '^(----[- ]BEGIN|ssh-(rsa|dss)) ' - language: AsciiDoc pattern: '^[=-]+(\s|\n)|{{[A-Za-z]' - language: AGS Script pattern: '^(\/\/.+|((import|export)\s+)?(function|int|float|char)\s+((room|repeatedly|on|game)_)?([A-Za-z]+[A-Za-z_0-9]+)\s*[;\(])' - extensions: ['.asm'] rules: - language: Motorola 68K Assembly named_pattern: m68k - extensions: ['.asy'] rules: - language: LTspice Symbol pattern: '^SymbolType[ \t]' - language: Asymptote - extensions: ['.bb'] rules: - language: BlitzBasic pattern: '(<^\s*; |End Function)' - language: BitBake pattern: '^\s*(# |include|require)\b' - extensions: ['.builds'] rules: - language: XML pattern: '^(\s*)(?i:)' - language: JavaScript pattern: '(?m:\/\/|("|'')use strict\1|export\s+default\s|\/\*.*?\*\/)' - extensions: ['.f'] rules: - language: Forth pattern: '^: ' - language: Filebench WML pattern: 'flowop' - language: Fortran named_pattern: fortran - extensions: ['.for'] rules: - language: Forth pattern: '^: ' - language: Fortran named_pattern: fortran - extensions: ['.fr'] rules: - language: Forth pattern: '^(: |also |new-device|previous )' - language: Frege pattern: '^\s*(import|module|package|data|type) ' - language: Text - extensions: ['.fs'] rules: - language: Forth pattern: '^(: |new-device)' - language: 'F#' pattern: '^\s*(#light|import|let|module|namespace|open|type)' - language: GLSL pattern: '^\s*(#version|precision|uniform|varying|vec[234])' - language: Filterscript pattern: '#include|#pragma\s+(rs|version)|__attribute__' - extensions: ['.gd'] rules: - language: GAP pattern: '\s*(Declare|BindGlobal|KeyDependentOperation)' - language: GDScript pattern: '\s*(extends|var|const|enum|func|class|signal|tool|yield|assert|onready)' - extensions: ['.gml'] rules: - language: XML pattern: '(?i:^\s*(\<\?xml|xmlns))' - language: Graph Modeling Language pattern: '(?i:^\s*(graph|node)\s+\[$)' - language: Gerber Image pattern: '\*\%$' - language: Game Maker Language - extensions: ['.gs'] rules: - language: GLSL pattern: '^#version\s+[0-9]+\b' - language: Gosu pattern: '^uses (java|gw)\.' - language: Genie pattern: '^\[indent=[0-9]+\]' - extensions: ['.h'] rules: - language: Objective-C named_pattern: objectivec - language: C++ named_pattern: cpp - extensions: ['.hh'] rules: - language: Hack pattern: '<\?hh' - extensions: ['.i'] rules: - language: Motorola 68K Assembly named_pattern: m68k - language: SWIG pattern: '^[ \t]*%[a-z_]+\b|^%[{}]$' - extensions: ['.ice'] rules: - language: JSON pattern: '\A\s*[{\[]' - language: Slice - extensions: ['.inc'] rules: - language: Motorola 68K Assembly named_pattern: m68k - language: PHP pattern: '^<\?(?:php)?' - language: SourcePawn pattern: '^public\s+(?:SharedPlugin(?:\s+|:)__pl_\w+\s*=(?:\s*{)?|(?:void\s+)?__pl_\w+_SetNTVOptional\(\)(?:\s*{)?)' - language: NASL pattern: - '^\s*include\s*\(\s*(?:"|'')[\\/\w\-\.:\s]+\.(?:nasl|inc)\s*(?:"|'')\s*\)\s*;' - '^\s*(?:global|local)_var\s+(?:\w+(?:\s*=\s*[\w\-"'']+)?\s*)(?:,\s*\w+(?:\s*=\s*[\w\-"'']+)?\s*)*+\s*;' - '^\s*namespace\s+\w+\s*{' - '^\s*object\s+\w+\s*(?:extends\s+\w+(?:::\w+)?)?\s*{' - '^\s*(?:public\s+|private\s+|\s*)function\s+\w+\s*\([\w\s,]*\)\s*{' - language: POV-Ray SDL pattern: '^\s*#(declare|local|macro|while)\s' - extensions: ['.l'] rules: - language: Common Lisp pattern: '\(def(un|macro)\s' - language: Lex pattern: '^(%[%{}]xs|<.*>)' - language: Roff pattern: '^\.[A-Za-z]{2}(\s|$)' - language: PicoLisp pattern: '^\((de|class|rel|code|data|must)\s' - extensions: ['.ls'] rules: - language: LoomScript pattern: '^\s*package\s*[\w\.\/\*\s]*\s*{' - language: LiveScript - extensions: ['.lsp', '.lisp'] rules: - language: Common Lisp pattern: '^\s*\((?i:defun|in-package|defpackage) ' - language: NewLisp pattern: '^\s*\(define ' - extensions: ['.m'] rules: - language: Objective-C named_pattern: objectivec - language: Mercury pattern: ':- module' - language: MUF pattern: '^: ' - language: M pattern: '^\s*;' - language: Mathematica and: - pattern: '\(\*' - pattern: '\*\)$' - language: MATLAB pattern: '^\s*%' - language: Limbo pattern: '^\w+\s*:\s*module\s*{' - extensions: ['.mask'] rules: - language: Unity3d Asset pattern: 'tag:unity3d.com' - extensions: ['.md'] rules: - language: Markdown pattern: - '(^[-A-Za-z0-9=#!\*\[|>])|<\/' - '\A\z' - language: GCC Machine Description pattern: '^(;;|\(define_)' - language: Markdown - extensions: ['.ml'] rules: - language: OCaml pattern: '(^\s*module)|let rec |match\s+(\S+\s)+with' - language: Standard ML pattern: '=> |case\s+(\S+\s)+of' - extensions: ['.mod'] rules: - language: XML pattern: '\s' - extensions: ['.pro'] rules: - language: Proguard pattern: '^-(include\b.*\.pro$|keep\b|keepclassmembers\b|keepattributes\b)' - language: Prolog pattern: '^[^\[#]+:-' - language: INI pattern: 'last_client=' - language: QMake and: - pattern: HEADERS - pattern: SOURCES - language: IDL pattern: '^\s*function[ \w,]+$' - extensions: ['.properties'] rules: - language: INI and: - named_pattern: key_equals_value - pattern: '^[;\[]' - language: Java Properties and: - named_pattern: key_equals_value - pattern: '^[#!]' - language: INI named_pattern: key_equals_value - language: Java properties pattern: '^[^#!][^:]*:' - extensions: ['.q'] rules: - language: q pattern: '((?i:[A-Z.][\w.]*:{)|(^|\n)\\(cd?|d|l|p|ts?) )' - language: HiveQL pattern: '(?i:SELECT\s+[\w*,]+\s+FROM|(CREATE|ALTER|DROP)\s(DATABASE|SCHEMA|TABLE))' - extensions: ['.qs'] rules: - language: Q# pattern: '^((\/{2,3})?\s*(namespace|operation)\b)' - language: Qt Script pattern: '(\w+\.prototype\.\w+|===|\bvar\b)' - extensions: ['.r'] rules: - language: Rebol pattern: '(?i:\bRebol\b)' - language: R pattern: '<-|^\s*#' - extensions: ['.re'] rules: - language: Reason pattern: - '^\s*module\s+type\s' - '^\s*(?:include|open)\s+\w+\s*;\s*$' - '^\s*let\s+(?:module\s\w+\s*=\s*{|\w+:\s+.*=.*;\s*$)' - language: C++ pattern: - '^\s*#(?:(?:if|ifdef|define|pragma)\s+\w|\s*include\s+<[^>]+>)' - '^\s*template\s*<' - extensions: ['.res'] rules: - language: ReScript pattern: - '^\s*(let|module|type)\s+\w*\s+=\s+' - '^\s*(?:include|open)\s+\w+\s*$' - extensions: ['.rno'] rules: - language: RUNOFF pattern: '(?i:^\.!|^\f|\f$|^\.end lit(?:eral)?\b|^\.[a-zA-Z].*?;\.[a-zA-Z](?:[; \t])|\^\*[^\s*][^*]*\\\*(?=$|\s)|^\.c;[ \t]*\w+)' - language: Roff pattern: '^\.\\" ' - extensions: ['.rpy'] rules: - language: Python pattern: '(?m:^(import|from|class|def)\s)' - language: "Ren'Py" - extensions: ['.rs'] rules: - language: Rust pattern: '^(use |fn |mod |pub |macro_rules|impl|#!?\[)' - language: RenderScript pattern: '#include|#pragma\s+(rs|version)|__attribute__' - extensions: ['.s'] rules: - language: Motorola 68K Assembly named_pattern: m68k - extensions: ['.sc'] rules: - language: SuperCollider pattern: '(?i:\^(this|super)\.|^\s*~\w+\s*=\.)' - language: Scala pattern: '(^\s*import (scala|java)\.|^\s*class\b)' - extensions: ['.sol'] rules: - language: Solidity pattern: '\bpragma\s+solidity\b|\b(?:abstract\s+)?contract\s+(?!\d)[a-zA-Z0-9$_]+(?:\s+is\s+(?:[a-zA-Z0-9$_][^\{]*?)?)?\s*\{' - language: Gerber Image pattern: '^G75\*' - extensions: ['.sql'] rules: # Postgres - language: PLpgSQL pattern: '(?i:^\\i\b|AS\s+\$\$|LANGUAGE\s+''?plpgsql''?|BEGIN(\s+WORK)?\s*;)' # IBM db2 - language: SQLPL pattern: '(?i:ALTER\s+MODULE|MODE\s+DB2SQL|\bSYS(CAT|PROC)\.|ASSOCIATE\s+RESULT\s+SET|\bEND!\s*$)' # Oracle - language: PLSQL pattern: '(?i:\$\$PLSQL_|XMLTYPE|systimestamp|\.nextval|CONNECT\s+BY|AUTHID\s+(DEFINER|CURRENT_USER)|constructor\W+function)' # T-SQL - language: TSQL pattern: '(?i:^\s*GO\b|BEGIN(\s+TRY|\s+CATCH)|OUTPUT\s+INSERTED|DECLARE\s+@|\[dbo\])' - language: SQL - extensions: ['.srt'] rules: - language: SubRip Text pattern: '^(\d{2}:\d{2}:\d{2},\d{3})\s*(-->)\s*(\d{2}:\d{2}:\d{2},\d{3})$' - extensions: ['.t'] rules: - language: Perl named_pattern: perl5 - language: Raku pattern: '^\s*(?:use\s+v6\b|\bmodule\b|\bmy\s+class\b)' - language: Turing pattern: '^\s*%[ \t]+|^\s*var\s+\w+(\s*:\s*\w+)?\s*:=\s*\w+' - extensions: ['.toc'] rules: - language: World of Warcraft Addon Data pattern: '^## |@no-lib-strip@' - language: TeX pattern: '^\\(contentsline|defcounter|beamer|boolfalse)' - extensions: ['.ts'] rules: - language: XML pattern: ' ' # Heads up - we don't usually write heuristics like this (with no regex match) - language: Scilab - extensions: ['.tsx'] rules: - language: TSX pattern: '^\s*(import.+(from\s+|require\()[''"]react|\/\/\/\s*]?\d+|m)?|[ \t]ex)(?=:(?=[ \t]*set?[ \t][^\n:]+:)|:(?![ \t]* set?[ \t]))(?:(?:[ \t]|[ \t]*:[ \t]*)\w*(?:[ \t]*=(?:[^\\[ \t]]|\\.)*)?)*[[ \t]:](?:filetype|ft|syntax)[ \t]*=help(?=[ \t]|:|$)' # HACK: This is a contrived use of heuristics needed to address # an unusual edge-case. See https://git.io/JULye for discussion. - language: Text - extensions: ['.v'] rules: - language: Coq pattern: '(?:^|\s)(?:Proof|Qed)\.(?:$|\s)|(?:^|\s)Require[ \t]+(Import|Export)\s' - language: Verilog pattern: '^[ \t]*module\s+[^\s()]+\s+\#?\(|^[ \t]*`(?:define|ifdef|ifndef|include|timescale)|^[ \t]*always[ \t]+@|^[ \t]*initial[ \t]+(begin|@)' - language: V pattern: '\$(?:if|else)[ \t]|^[ \t]*fn\s+[^\s()]+\(.*?\).*?\{|^[ \t]*for\s*\{' - extensions: ['.vba'] rules: - language: Vim script pattern: '^UseVimball' - language: VBA - extensions: ['.w'] rules: - language: OpenEdge ABL pattern: '&ANALYZE-SUSPEND _UIB-CODE-BLOCK _CUSTOM _DEFINITIONS' - language: CWeb pattern: '^@(<|\w+\.)' - extensions: ['.x'] rules: - language: DirectX 3D File pattern: '^xof 030(2|3)(?:txt|bin|tzip|bzip)\b' - language: RPC pattern: '\b(program|version)\s+\w+\s*{|\bunion\s+\w+\s+switch\s*\(' - language: Logos pattern: '^%(end|ctor|hook|group)\b' - language: Linker Script pattern: 'OUTPUT_ARCH\(|OUTPUT_FORMAT\(|SECTIONS' - extensions: ['.yy'] rules: - language: JSON pattern: '\"modelName\"\:\s*\"GM' - language: Yacc named_patterns: cpp: - '^\s*#\s*include <(cstdint|string|vector|map|list|array|bitset|queue|stack|forward_list|unordered_map|unordered_set|(i|o|io)stream)>' - '^\s*template\s*<' - '^[ \t]*(try|constexpr)' - '^[ \t]*catch\s*\(' - '^[ \t]*(class|(using[ \t]+)?namespace)\s+\w+' - '^[ \t]*(private|public|protected):$' - 'std::\w+' fortran: '^(?i:[c*][^abd-z]| (subroutine|program|end|data)\s|\s*!)' key_equals_value: '^[^#!;][^=]*=' m68k: - '(?im)\bmoveq(?:\.l)?\s+#(?:\$-?[0-9a-f]{1,3}|%[0-1]{1,8}|-?[0-9]{1,3}),\s*d[0-7]\b' - '(?im)^\s*move(?:\.[bwl])?\s+(?:sr|usp),\s*[^\s]+' - '(?im)^\s*move\.[bwl]\s+.*\b[ad]\d' - '(?im)^\s*movem\.[bwl]\b' - '(?im)^\s*move[mp](?:\.[wl])?\b' - '(?im)^\s*btst\b' - '(?im)^\s*dbra\b' man-heading: '^[.''][ \t]*SH +(?:[^"\s]+|"[^"\s]+)' man-title: '^[.''][ \t]*TH +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)' mdoc-date: '^[.''][ \t]*Dd +(?:[^"\s]+|"[^"]+")' mdoc-heading: '^[.''][ \t]*Sh +(?:[^"\s]|"[^"]+")' mdoc-title: '^[.''][ \t]*Dt +(?:[^"\s]+|"[^"]+") +"?(?:[1-9]|@[^\s@]+@)' objectivec: '^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])' perl5: '\buse\s+(?:strict\b|v?5\.)' perl6: '^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)'