Skip to content

Instantly share code, notes, and snippets.

@agos
Created December 28, 2010 16:25
Show Gist options
  • Save agos/757384 to your computer and use it in GitHub Desktop.
Save agos/757384 to your computer and use it in GitHub Desktop.
# @title Diff
# @matchuti public.diff-text
# @matchext diff, patch
# @matchfirstline (?x)^(=== modified file|====\s*//.+\s-\s.+\s+ ====|Index: |--- [^%]|\*\*\*.*\d{4}\s*$|\d+(,\d+)*(a|d|c)\d+(,\d+)*$|diff --git )
# language definition for files created with 'diff'
# diff created with -u option
state oldfile = '(?=^[-]{3})' begin
oldfile start '^[-]{3}'
oldfile start '^[-]'
newfile start '^[+]'
difflines start '^@@'
end
# diff created with -c option
state oldfile = '(?=^[*]{3})' begin
environment oldfile = '^[*]{3}[[:blank:]]+[[:digit:]]' begin
normal start '^[[:space:]]'
newfile = '(?=^[-]{3})' exit
end
oldfile start '^[*]{3}'
environment newfile = '^[-]{3}[[:blank:]]+[[:digit:]]' begin
normal start '^[[:space:]]'
newfile = '(?=^[*]{3})' exit
normal start '^diff' exit
end
newfile start '^[-]{3}'
end
# otherwise, created without options
state difflines = '(?=^[[:digit:]])' begin
difflines start '^[[:digit:]]'
oldfile start '^[<]'
newfile start '^[>]'
end
{ scopeName = 'source.diff';
firstLineMatch = '(?x)^
(===\ modified\ file
|==== \s* // .+ \s - \s .+ \s+ ====
|Index:\
|---\ [^%]
|\*\*\*.*\d{4}\s*$
|\d+(,\d+)* (a|d|c) \d+(,\d+)* $
|diff\ --git\
)
';
fileTypes = ( 'diff', 'patch' );
foldingStartMarker = '^\+\+\+';
foldingStopMarker = '^---|^$';
patterns = (
{ name = 'meta.separator.diff';
match = '^((\*{15})|(={67})|(-{3}))$\n?';
captures = { 1 = { name = 'punctuation.definition.separator.diff'; }; };
},
{ name = 'meta.diff.range.normal';
match = '^\d+(,\d+)*(a|d|c)\d+(,\d+)*$\n?';
},
{ name = 'meta.diff.range.unified';
match = '^(@@)\s*(.+?)\s*(@@)($\n?)?';
captures = {
1 = { name = 'punctuation.definition.range.diff'; };
2 = { name = 'meta.toc-list.line-number.diff'; };
3 = { name = 'punctuation.definition.range.diff'; };
};
},
{ name = 'meta.diff.range.context';
match = '^(((\-{3}) .+ (\-{4}))|((\*{3}) .+ (\*{4})))$\n?';
captures = {
3 = { name = 'punctuation.definition.range.diff'; };
4 = { name = 'punctuation.definition.range.diff'; };
6 = { name = 'punctuation.definition.range.diff'; };
7 = { name = 'punctuation.definition.range.diff'; };
};
},
{ name = 'meta.diff.header.from-file';
match = '(^(((-{3}) .+)|((\*{3}) .+))$\n?|^(={4}) .+(?= - ))';
captures = {
4 = { name = 'punctuation.definition.from-file.diff'; };
6 = { name = 'punctuation.definition.from-file.diff'; };
7 = { name = 'punctuation.definition.from-file.diff'; };
};
},
{ name = 'meta.diff.header.to-file';
match = '(^(\+{3}) .+$\n?| (-) .* (={4})$\n?)';
captures = {
2 = { name = 'punctuation.definition.to-file.diff'; };
3 = { name = 'punctuation.definition.to-file.diff'; };
4 = { name = 'punctuation.definition.to-file.diff'; };
};
},
{ name = 'markup.inserted.diff';
match = '^(((>)( .*)?)|((\+).*))$\n?';
captures = {
3 = { name = 'punctuation.definition.inserted.diff'; };
6 = { name = 'punctuation.definition.inserted.diff'; };
};
},
{ name = 'markup.changed.diff';
match = '^(!).*$\n?';
captures = { 1 = { name = 'punctuation.definition.inserted.diff'; }; };
},
{ name = 'markup.deleted.diff';
match = '^(((<)( .*)?)|((-).*))$\n?';
captures = {
3 = { name = 'punctuation.definition.inserted.diff'; };
6 = { name = 'punctuation.definition.inserted.diff'; };
};
},
{ name = 'meta.diff.index';
match = '^Index(:) (.+)$\n?';
captures = {
1 = { name = 'punctuation.separator.key-value.diff'; };
2 = { name = 'meta.toc-list.file-name.diff'; };
};
},
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment