Message ID | 20240404163827.5855-1-utsavp0213@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] userdiff: add builtin driver for typescript language | expand |
Utsav Parmar <utsavp0213@gmail.com> writes: > Subject: Re: [PATCH v2] userdiff: add builtin driver for typescript language "builtin driver" -> "patterns", probably, as the "userdiff" customization does not allow adding any new code. > diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt > index 4338d023d9..4461c41054 100644 > --- a/Documentation/gitattributes.txt > +++ b/Documentation/gitattributes.txt > @@ -902,6 +902,8 @@ patterns are available: > > - `tex` suitable for source code for LaTeX documents. > > +- `typescript` suitable for source code for TypeScript language. > + Good that you did not forget to add an entry to this list (and to the right place). > diff --git a/t/t4018/typescript-function-assignment b/t/t4018/typescript-function-assignment > new file mode 100644 > index 0000000000..49c528713e > --- /dev/null > +++ b/t/t4018/typescript-function-assignment > @@ -0,0 +1,4 @@ > +const RIGHT = function(one: number): Type { > + someMethodCall(); > + return ChangeMe; > +} > diff --git a/t/t4018/typescript-interface b/t/t4018/typescript-interface > new file mode 100644 > index 0000000000..6f3665c2af > --- /dev/null > +++ b/t/t4018/typescript-interface > @@ -0,0 +1,4 @@ > +interface RIGHT { > + one?: string; > + [propName: ChangeMe]: any; > +} > \ No newline at end of file I do not speak typescript, but is it important for the language that the sources can be stored with an incomplete line at the end of the file? IOW, I am wondering if it is deliberate *and* matters to the tests that some sample files end with an incomplete line while others do not. If that is not the case, please fix this and the next file; we do not generally want a file with an incomplete line at the end unless there is a compelling reason to (i.e., we do test that our tools work with such files, and it may be convenient to ship sample input with incomplete lines to run such tests). As to the actual pattern and the words the patterns catch, I have no idea if they are sensible for typescript language---folks with more experience than myself should lend their eyeballs to review. Thanks.
Utsav Parmar <utsavp0213@gmail.com> writes: >... > diff --git a/t/t4034/typescript/expect b/t/t4034/typescript/expect > new file mode 100644 > index 0000000000..19605fec4d > --- /dev/null > +++ b/t/t4034/typescript/expect > @@ -0,0 +1,33 @@ > +<BOLD>diff --git a/pre b/post<RESET> > +<BOLD>index e4a51a2..9c56465 100644<RESET> > +<BOLD>--- a/pre<RESET> > +<BOLD>+++ b/post<RESET> > +<CYAN>@@ -1,16 +1,16 @@<RESET> > +log("Hello World<RED>!\n<RESET><GREEN>?<RESET>") > +<GREEN>(<RESET>1<GREEN>) (<RESET>-1e10<GREEN>) (<RESET>0xabcdef<GREEN>) u<RESET>'<RED>x<RESET><GREEN>y<RESET>' > +!<RED>a<RESET><GREEN>x<RESET> ~<RED>a a<RESET><GREEN>x x<RESET>++ <RED>a<RESET><GREEN>x<RESET>-- <RED>a<RESET><GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>&<RED>b > <RESET> There is a funny line-wrapping around here that corrupts the patch. > +<RED>a<RESET><GREEN>y > <RESET>
diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt index 4338d023d9..4461c41054 100644 --- a/Documentation/gitattributes.txt +++ b/Documentation/gitattributes.txt @@ -902,6 +902,8 @@ patterns are available: - `tex` suitable for source code for LaTeX documents. +- `typescript` suitable for source code for TypeScript language. + Customizing word diff ^^^^^^^^^^^^^^^^^^^^^ diff --git a/t/t4018/typescript-arrow-function b/t/t4018/typescript-arrow-function new file mode 100644 index 0000000000..85a3d9cd6b --- /dev/null +++ b/t/t4018/typescript-arrow-function @@ -0,0 +1,4 @@ +const RIGHT = (one) => { + someMethodCall(); + return ChangeMe; +} diff --git a/t/t4018/typescript-class-member-function b/t/t4018/typescript-class-member-function new file mode 100644 index 0000000000..f34b0a2bac --- /dev/null +++ b/t/t4018/typescript-class-member-function @@ -0,0 +1,7 @@ +class Test { + var one; + function RIGHT(two: string) { + someMethodCall(); + return ChangeMe; + } +} diff --git a/t/t4018/typescript-enum b/t/t4018/typescript-enum new file mode 100644 index 0000000000..8c045a45ec --- /dev/null +++ b/t/t4018/typescript-enum @@ -0,0 +1,6 @@ +enum RIGHT { + ONE = 1, + TWO, + THREE, + ChangeMe +} diff --git a/t/t4018/typescript-function b/t/t4018/typescript-function new file mode 100644 index 0000000000..62cf63f669 --- /dev/null +++ b/t/t4018/typescript-function @@ -0,0 +1,4 @@ +function RIGHT<Type implements AnotherType>(one: number): Type { + someMethodCall(); + return ChangeMe; +} diff --git a/t/t4018/typescript-function-assignment b/t/t4018/typescript-function-assignment new file mode 100644 index 0000000000..49c528713e --- /dev/null +++ b/t/t4018/typescript-function-assignment @@ -0,0 +1,4 @@ +const RIGHT = function(one: number): Type { + someMethodCall(); + return ChangeMe; +} diff --git a/t/t4018/typescript-interface b/t/t4018/typescript-interface new file mode 100644 index 0000000000..6f3665c2af --- /dev/null +++ b/t/t4018/typescript-interface @@ -0,0 +1,4 @@ +interface RIGHT { + one?: string; + [propName: ChangeMe]: any; +} \ No newline at end of file diff --git a/t/t4018/typescript-type b/t/t4018/typescript-type new file mode 100644 index 0000000000..e1bb2d8371 --- /dev/null +++ b/t/t4018/typescript-type @@ -0,0 +1,4 @@ +type RIGHT = { + one: number, + ChangeMe: CustomType +} \ No newline at end of file diff --git a/t/t4034-diff-words.sh b/t/t4034-diff-words.sh index 74586f3813..4e3cf415c2 100755 --- a/t/t4034-diff-words.sh +++ b/t/t4034-diff-words.sh @@ -338,6 +338,7 @@ test_language_driver python test_language_driver ruby test_language_driver scheme test_language_driver tex +test_language_driver typescript test_expect_success 'word-diff with diff.sbe' ' cat >pre <<-\EOF && diff --git a/t/t4034/typescript/expect b/t/t4034/typescript/expect new file mode 100644 index 0000000000..19605fec4d --- /dev/null +++ b/t/t4034/typescript/expect @@ -0,0 +1,33 @@ +<BOLD>diff --git a/pre b/post<RESET> +<BOLD>index e4a51a2..9c56465 100644<RESET> +<BOLD>--- a/pre<RESET> +<BOLD>+++ b/post<RESET> +<CYAN>@@ -1,16 +1,16 @@<RESET> +log("Hello World<RED>!\n<RESET><GREEN>?<RESET>") +<GREEN>(<RESET>1<GREEN>) (<RESET>-1e10<GREEN>) (<RESET>0xabcdef<GREEN>) u<RESET>'<RED>x<RESET><GREEN>y<RESET>' +!<RED>a<RESET><GREEN>x<RESET> ~<RED>a a<RESET><GREEN>x x<RESET>++ <RED>a<RESET><GREEN>x<RESET>-- <RED>a<RESET><GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>&<RED>b <RESET> +<RED>a<RESET><GREEN>y <RESET> +<GREEN>x<RESET>*<RED>b a<RESET><GREEN>y x<RESET>/<RED>b a<RESET><GREEN>y x<RESET>%<RED>b <RESET> +<RED>a<RESET><GREEN>y <RESET> +<GREEN>x<RESET>+<RED>b a<RESET><GREEN>y x<RESET>-<RED>b <RESET> +<RED>a<RESET><GREEN>y <RESET> +<GREEN>x<RESET><<<RED>b a<RESET><GREEN>y x<RESET>>><RED>b <RESET> +<RED>a<RESET><GREEN>y <RESET> +<GREEN>x<RESET><<RED>b a<RESET><GREEN>y x<RESET><=<RED>b a<RESET><GREEN>y x<RESET>><RED>b a<RESET><GREEN>y x<RESET>>=<RED>b <RESET> +<RED>a<RESET><GREEN>y <RESET> +<GREEN>x<RESET>==<RED>b a<RESET><GREEN>y x<RESET>!=<RED>b <RESET> +<RED>a<RESET><GREEN>y <RESET> +<GREEN>x<RESET>&<RED>b <RESET> +<RED>a<RESET><GREEN>y <RESET> +<GREEN>x<RESET>^<RED>b <RESET> +<RED>a<RESET><GREEN>y <RESET> +<GREEN>x<RESET>|<RED>b <RESET> +<RED>a<RESET><GREEN>y <RESET> +<GREEN>x<RESET>&&<RED>b <RESET> +<RED>a<RESET><GREEN>y <RESET> +<GREEN>x<RESET>||<RED>b <RESET> +<RED>a<RESET><GREEN>y <RESET> +<GREEN>x<RESET>?<RED>b<RESET><GREEN>y<RESET>:z +<RED>a<RESET><GREEN>x<RESET>=<RED>b a<RESET><GREEN>y x<RESET>+=<RED>b a<RESET><GREEN>y x<RESET>-=<RED>b a<RESET><GREEN>y x<RESET>*=<RED>b a<RESET><GREEN>y x<RESET>/=<RED>b a<RESET><GREEN>y x<RESET>%=<RED>b a<RESET><GREEN>y x<RESET><<=<RED>b a<RESET><GREEN>y x<RESET>>>=<RED>b a<RESET><GREEN>y x<RESET>&=<RED>b a<RESET><GREEN>y x<RESET>^=<RED>b a<RESET><GREEN>y x<RESET>|=<RED>b <RESET> +<RED>a<RESET><GREEN>y <RESET> +<GREEN>x<RESET>,y diff --git a/t/t4034/typescript/post b/t/t4034/typescript/post new file mode 100644 index 0000000000..b1b03a7666 --- /dev/null +++ b/t/t4034/typescript/post @@ -0,0 +1,16 @@ +log("Hello World?") +(1) (-1e10) (0xabcdef) u'y' +!x ~x x++ x-- x*y x&y +x*y x/y x%y +x+y x-y +x<<y x>>y +x<y x<=y x>y x>=y +x==y x!=y +x&y +x^y +x|y +x&&y +x||y +x?y:z +x=y x+=y x-=y x*=y x/=y x%=y x<<=y x>>=y x&=y x^=y x|=y +x,y diff --git a/t/t4034/typescript/pre b/t/t4034/typescript/pre new file mode 100644 index 0000000000..13a0b2138c --- /dev/null +++ b/t/t4034/typescript/pre @@ -0,0 +1,16 @@ +log("Hello World!\n") +1 -1e10 0xabcdef 'x' +!a ~a a++ a-- a*b a&b +a*b a/b a%b +a+b a-b +a<<b a>>b +a<b a<=b a>b a>=b +a==b a!=b +a&b +a^b +a|b +a&&b +a||b +a?b:z +a=b a+=b a-=b a*=b a/=b a%=b a<<=b a>>=b a&=b a^=b a|=b +a,y diff --git a/userdiff.c b/userdiff.c index 92ef649c99..dbb5d7c072 100644 --- a/userdiff.c +++ b/userdiff.c @@ -297,6 +297,22 @@ PATTERNS("scheme", "|([^][)(}{[ \t])+"), PATTERNS("tex", "^(\\\\((sub)*section|chapter|part)\\*{0,1}\\{.*)$", "\\\\[a-zA-Z@]+|\\\\.|([a-zA-Z0-9]|[^\x01-\x7f])+"), +PATTERNS("typescript", + "^[ \t]*((enum|interface|type)[ \t]+([a-zA-Z][a-zA-Z0-9]*)+.*)$\n" + /* Method definitions */ + "^[ \t]*[a-z]+[ \t]+([A-Za-z_][A-Za-z_0-9]*)+([ \t]*=[ \t]*(function)?)?([ \t]*[A-Za-z_<>&][?&<>|.,A-Za-z_]*[ \t]*)*[ \t]*\\([^;]*$", + /* -- */ + "[a-zA-Z_][a-zA-Z0-9_]*" + /* Integers and floats */ + "|[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?" + /* Binary */ + "|0[bB][01]+" + /* Hexadecimals */ + "|0[xX][0-9a-fA-F]+" + /* Floats starting with a decimal point */ + "|[-+]?([0-9]*\\.?[0-9]+|[0-9]+\\.?[0-9]*)([eE][-+]?[0-9]+)?" + /* Operators */ + "[-+*/%&|^!=<>]=?|===|!==|<<=?|>>=?|&&|\\|\\||\\?\\?|\\+\\+|--|~"), { "default", NULL, NULL, -1, { NULL, 0 } }, }; #undef PATTERNS
Signed-off-by: Utsav Parmar <utsavp0213@gmail.com> --- Documentation/gitattributes.txt | 2 ++ t/t4018/typescript-arrow-function | 4 +++ t/t4018/typescript-class-member-function | 7 +++++ t/t4018/typescript-enum | 6 +++++ t/t4018/typescript-function | 4 +++ t/t4018/typescript-function-assignment | 4 +++ t/t4018/typescript-interface | 4 +++ t/t4018/typescript-type | 4 +++ t/t4034-diff-words.sh | 1 + t/t4034/typescript/expect | 33 ++++++++++++++++++++++++ t/t4034/typescript/post | 16 ++++++++++++ t/t4034/typescript/pre | 16 ++++++++++++ userdiff.c | 16 ++++++++++++ 13 files changed, 117 insertions(+) create mode 100644 t/t4018/typescript-arrow-function create mode 100644 t/t4018/typescript-class-member-function create mode 100644 t/t4018/typescript-enum create mode 100644 t/t4018/typescript-function create mode 100644 t/t4018/typescript-function-assignment create mode 100644 t/t4018/typescript-interface create mode 100644 t/t4018/typescript-type create mode 100644 t/t4034/typescript/expect create mode 100644 t/t4034/typescript/post create mode 100644 t/t4034/typescript/pre