From e7ba877bc1ba4980072a61336bbcf9652ed01771 Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Mon, 11 Oct 2021 16:54:19 +0200 Subject: [PATCH] PL/SQL: Updated keywords + other improvements (#3109) --- components/prism-plsql.js | 41 +- components/prism-plsql.min.js | 2 +- tests/languages/plsql/keyword_feature.test | 392 ++++++++++++++++---- tests/languages/plsql/label_feature.test | 7 + tests/languages/plsql/operator_feature.test | 37 +- 5 files changed, 386 insertions(+), 93 deletions(-) create mode 100644 tests/languages/plsql/label_feature.test diff --git a/components/prism-plsql.js b/components/prism-plsql.js index 0197bc383a..15967b9ed1 100644 --- a/components/prism-plsql.js +++ b/components/prism-plsql.js @@ -1,26 +1,17 @@ -(function (Prism) { +Prism.languages.plsql = Prism.languages.extend('sql', { + 'comment': { + pattern: /\/\*[\s\S]*?\*\/|--.*/, + greedy: true + }, + // https://docs.oracle.com/en/database/oracle/oracle-database/21/lnpls/plsql-reserved-words-keywords.html + 'keyword': /\b(?:A|ACCESSIBLE|ADD|AGENT|AGGREGATE|ALL|ALTER|AND|ANY|ARRAY|AS|ASC|AT|ATTRIBUTE|AUTHID|AVG|BEGIN|BETWEEN|BFILE_BASE|BINARY|BLOB_BASE|BLOCK|BODY|BOTH|BOUND|BULK|BY|BYTE|C|CALL|CALLING|CASCADE|CASE|CHAR|CHARACTER|CHARSET|CHARSETFORM|CHARSETID|CHAR_BASE|CHECK|CLOB_BASE|CLONE|CLOSE|CLUSTER|CLUSTERS|COLAUTH|COLLECT|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPILED|COMPRESS|CONNECT|CONSTANT|CONSTRUCTOR|CONTEXT|CONTINUE|CONVERT|COUNT|CRASH|CREATE|CREDENTIAL|CURRENT|CURSOR|CUSTOMDATUM|DANGLING|DATA|DATE|DATE_BASE|DAY|DECLARE|DEFAULT|DEFINE|DELETE|DESC|DETERMINISTIC|DIRECTORY|DISTINCT|DOUBLE|DROP|DURATION|ELEMENT|ELSE|ELSIF|EMPTY|END|ESCAPE|EXCEPT|EXCEPTION|EXCEPTIONS|EXCLUSIVE|EXECUTE|EXISTS|EXIT|EXTERNAL|FETCH|FINAL|FIRST|FIXED|FLOAT|FOR|FORALL|FORCE|FROM|FUNCTION|GENERAL|GOTO|GRANT|GROUP|HASH|HAVING|HEAP|HIDDEN|HOUR|IDENTIFIED|IF|IMMEDIATE|IMMUTABLE|IN|INCLUDING|INDEX|INDEXES|INDICATOR|INDICES|INFINITE|INSERT|INSTANTIABLE|INT|INTERFACE|INTERSECT|INTERVAL|INTO|INVALIDATE|IS|ISOLATION|JAVA|LANGUAGE|LARGE|LEADING|LENGTH|LEVEL|LIBRARY|LIKE|LIKE2|LIKE4|LIKEC|LIMIT|LIMITED|LOCAL|LOCK|LONG|LOOP|MAP|MAX|MAXLEN|MEMBER|MERGE|MIN|MINUS|MINUTE|MOD|MODE|MODIFY|MONTH|MULTISET|MUTABLE|NAME|NAN|NATIONAL|NATIVE|NCHAR|NEW|NOCOMPRESS|NOCOPY|NOT|NOWAIT|NULL|NUMBER_BASE|OBJECT|OCICOLL|OCIDATE|OCIDATETIME|OCIDURATION|OCIINTERVAL|OCILOBLOCATOR|OCINUMBER|OCIRAW|OCIREF|OCIREFCURSOR|OCIROWID|OCISTRING|OCITYPE|OF|OLD|ON|ONLY|OPAQUE|OPEN|OPERATOR|OPTION|OR|ORACLE|ORADATA|ORDER|ORGANIZATION|ORLANY|ORLVARY|OTHERS|OUT|OVERLAPS|OVERRIDING|PACKAGE|PARALLEL_ENABLE|PARAMETER|PARAMETERS|PARENT|PARTITION|PASCAL|PERSISTABLE|PIPE|PIPELINED|PLUGGABLE|POLYMORPHIC|PRAGMA|PRECISION|PRIOR|PRIVATE|PROCEDURE|PUBLIC|RAISE|RANGE|RAW|READ|RECORD|REF|REFERENCE|RELIES_ON|REM|REMAINDER|RENAME|RESOURCE|RESULT|RESULT_CACHE|RETURN|RETURNING|REVERSE|REVOKE|ROLLBACK|ROW|SAMPLE|SAVE|SAVEPOINT|SB1|SB2|SB4|SECOND|SEGMENT|SELECT|SELF|SEPARATE|SEQUENCE|SERIALIZABLE|SET|SHARE|SHORT|SIZE|SIZE_T|SOME|SPARSE|SQL|SQLCODE|SQLDATA|SQLNAME|SQLSTATE|STANDARD|START|STATIC|STDDEV|STORED|STRING|STRUCT|STYLE|SUBMULTISET|SUBPARTITION|SUBSTITUTABLE|SUBTYPE|SUM|SYNONYM|TABAUTH|TABLE|TDO|THE|THEN|TIME|TIMESTAMP|TIMEZONE_ABBR|TIMEZONE_HOUR|TIMEZONE_MINUTE|TIMEZONE_REGION|TO|TRAILING|TRANSACTION|TRANSACTIONAL|TRUSTED|TYPE|UB1|UB2|UB4|UNDER|UNION|UNIQUE|UNPLUG|UNSIGNED|UNTRUSTED|UPDATE|USE|USING|VALIST|VALUE|VALUES|VARIABLE|VARIANCE|VARRAY|VARYING|VIEW|VIEWS|VOID|WHEN|WHERE|WHILE|WITH|WORK|WRAPPED|WRITE|YEAR|ZONE)\b/i, + // https://docs.oracle.com/en/database/oracle/oracle-database/21/lnpls/plsql-language-fundamentals.html#GUID-96A42F7C-7A71-4B90-8255-CA9C8BD9722E + 'operator': /:=?|=>|[<>^~!]=|\.\.|\|\||\*\*|[-+*/%<>=@]/ +}); - var plsql = Prism.languages.plsql = Prism.languages.extend('sql', { - 'comment': [ - /\/\*[\s\S]*?\*\//, - /--.*/ - ] - }); - - var keyword = plsql['keyword']; - if (!Array.isArray(keyword)) { - keyword = plsql['keyword'] = [keyword]; - } - keyword.unshift( - /\b(?:ACCESS|AGENT|AGGREGATE|ARRAY|ARROW|AT|ATTRIBUTE|AUDIT|AUTHID|BFILE_BASE|BLOB_BASE|BLOCK|BODY|BOTH|BOUND|BYTE|CALLING|CHARSET(?:FORM|ID)|CHAR_BASE|CLOB_BASE|CLUSTERS?|COLAUTH|COLLECT|COMPILED|COMPRESS|CONSTANT|CONSTRUCTOR|CONTEXT|CRASH|CUSTOMDATUM|DANGLING|DATE_BASE|DEFINE|DETERMINISTIC|DURATION|ELEMENT|EMPTY|EXCEPTIONS?|EXCLUSIVE|EXTERNAL|FINAL|FORALL|FORM|FOUND|GENERAL|HEAP|HIDDEN|IDENTIFIED|IMMEDIATE|INCLUDING|INCREMENT|INDEXES|INDICATOR|INDICES|INFINITE|INITIAL|INSTANTIABLE|INTERFACE|INVALIDATE|ISOPEN|JAVA|LARGE|LEADING|LENGTH|LIBRARY|LIKE[24C]|LIMITED|LONG|LOOP|MAP|MAXEXTENTS|MAXLEN|MEMBER|MINUS|MLSLABEL|MULTISET|NAME|NAN|NATIVE|NEW|NOAUDIT|NOCOMPRESS|NOCOPY|NOTFOUND|NOWAIT|NUMBER(?:_BASE)?|OBJECT|OCI(?:COLL|DATE|DATETIME|DURATION|INTERVAL|LOBLOCATOR|NUMBER|RAW|REF|REFCURSOR|ROWID|STRING|TYPE)|OFFLINE|ONLINE|ONLY|OPAQUE|OPERATOR|ORACLE|ORADATA|ORGANIZATION|ORL(?:ANY|VARY)|OTHERS|OVERLAPS|OVERRIDING|PACKAGE|PARALLEL_ENABLE|PARAMETERS?|PASCAL|PCTFREE|PIPE(?:LINED)?|PRAGMA|PRIOR|PRIVATE|RAISE|RANGE|RAW|RECORD|REF|REFERENCE|REM|REMAINDER|RESOURCE|RESULT|RETURNING|REVERSE|ROW(?:ID|NUM|TYPE)|SAMPLE|SB[124]|SEGMENT|SELF|SEPARATE|SEQUENCE|SHORT|SIZE(?:_T)?|SPARSE|SQL(?:CODE|DATA|NAME|STATE)|STANDARD|STATIC|STDDEV|STORED|STRING|STRUCT|STYLE|SUBMULTISET|SUBPARTITION|SUBSTITUTABLE|SUBTYPE|SUCCESSFUL|SYNONYM|SYSDATE|TABAUTH|TDO|THE|TIMEZONE_(?:ABBR|HOUR|MINUTE|REGION)|TRAILING|TRANSAC(?:TIONAL)?|TRUSTED|UB[124]|UID|UNDER|UNTRUSTED|VALIDATE|VALIST|VARCHAR2|VARIABLE|VARIANCE|VARRAY|VIEWS|VOID|WHENEVER|WRAPPED|ZONE)\b/i - ); - - var operator = plsql['operator']; - if (!Array.isArray(operator)) { - operator = plsql['operator'] = [operator]; - } - operator.unshift( - /:=/ - ); - -}(Prism)); +Prism.languages.insertBefore('plsql', 'operator', { + 'label': { + pattern: /<<\s*\w+\s*>>/, + alias: 'symbol' + }, +}); diff --git a/components/prism-plsql.min.js b/components/prism-plsql.min.js index ffd7438813..e20f68e456 100644 --- a/components/prism-plsql.min.js +++ b/components/prism-plsql.min.js @@ -1 +1 @@ -!function(E){var A=E.languages.plsql=E.languages.extend("sql",{comment:[/\/\*[\s\S]*?\*\//,/--.*/]}),T=A.keyword;Array.isArray(T)||(T=A.keyword=[T]),T.unshift(/\b(?:ACCESS|AGENT|AGGREGATE|ARRAY|ARROW|AT|ATTRIBUTE|AUDIT|AUTHID|BFILE_BASE|BLOB_BASE|BLOCK|BODY|BOTH|BOUND|BYTE|CALLING|CHARSET(?:FORM|ID)|CHAR_BASE|CLOB_BASE|CLUSTERS?|COLAUTH|COLLECT|COMPILED|COMPRESS|CONSTANT|CONSTRUCTOR|CONTEXT|CRASH|CUSTOMDATUM|DANGLING|DATE_BASE|DEFINE|DETERMINISTIC|DURATION|ELEMENT|EMPTY|EXCEPTIONS?|EXCLUSIVE|EXTERNAL|FINAL|FORALL|FORM|FOUND|GENERAL|HEAP|HIDDEN|IDENTIFIED|IMMEDIATE|INCLUDING|INCREMENT|INDEXES|INDICATOR|INDICES|INFINITE|INITIAL|INSTANTIABLE|INTERFACE|INVALIDATE|ISOPEN|JAVA|LARGE|LEADING|LENGTH|LIBRARY|LIKE[24C]|LIMITED|LONG|LOOP|MAP|MAXEXTENTS|MAXLEN|MEMBER|MINUS|MLSLABEL|MULTISET|NAME|NAN|NATIVE|NEW|NOAUDIT|NOCOMPRESS|NOCOPY|NOTFOUND|NOWAIT|NUMBER(?:_BASE)?|OBJECT|OCI(?:COLL|DATE|DATETIME|DURATION|INTERVAL|LOBLOCATOR|NUMBER|RAW|REF|REFCURSOR|ROWID|STRING|TYPE)|OFFLINE|ONLINE|ONLY|OPAQUE|OPERATOR|ORACLE|ORADATA|ORGANIZATION|ORL(?:ANY|VARY)|OTHERS|OVERLAPS|OVERRIDING|PACKAGE|PARALLEL_ENABLE|PARAMETERS?|PASCAL|PCTFREE|PIPE(?:LINED)?|PRAGMA|PRIOR|PRIVATE|RAISE|RANGE|RAW|RECORD|REF|REFERENCE|REM|REMAINDER|RESOURCE|RESULT|RETURNING|REVERSE|ROW(?:ID|NUM|TYPE)|SAMPLE|SB[124]|SEGMENT|SELF|SEPARATE|SEQUENCE|SHORT|SIZE(?:_T)?|SPARSE|SQL(?:CODE|DATA|NAME|STATE)|STANDARD|STATIC|STDDEV|STORED|STRING|STRUCT|STYLE|SUBMULTISET|SUBPARTITION|SUBSTITUTABLE|SUBTYPE|SUCCESSFUL|SYNONYM|SYSDATE|TABAUTH|TDO|THE|TIMEZONE_(?:ABBR|HOUR|MINUTE|REGION)|TRAILING|TRANSAC(?:TIONAL)?|TRUSTED|UB[124]|UID|UNDER|UNTRUSTED|VALIDATE|VALIST|VARCHAR2|VARIABLE|VARIANCE|VARRAY|VIEWS|VOID|WHENEVER|WRAPPED|ZONE)\b/i);var R=A.operator;Array.isArray(R)||(R=A.operator=[R]),R.unshift(/:=/)}(Prism); \ No newline at end of file +Prism.languages.plsql=Prism.languages.extend("sql",{comment:{pattern:/\/\*[\s\S]*?\*\/|--.*/,greedy:!0},keyword:/\b(?:A|ACCESSIBLE|ADD|AGENT|AGGREGATE|ALL|ALTER|AND|ANY|ARRAY|AS|ASC|AT|ATTRIBUTE|AUTHID|AVG|BEGIN|BETWEEN|BFILE_BASE|BINARY|BLOB_BASE|BLOCK|BODY|BOTH|BOUND|BULK|BY|BYTE|C|CALL|CALLING|CASCADE|CASE|CHAR|CHARACTER|CHARSET|CHARSETFORM|CHARSETID|CHAR_BASE|CHECK|CLOB_BASE|CLONE|CLOSE|CLUSTER|CLUSTERS|COLAUTH|COLLECT|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPILED|COMPRESS|CONNECT|CONSTANT|CONSTRUCTOR|CONTEXT|CONTINUE|CONVERT|COUNT|CRASH|CREATE|CREDENTIAL|CURRENT|CURSOR|CUSTOMDATUM|DANGLING|DATA|DATE|DATE_BASE|DAY|DECLARE|DEFAULT|DEFINE|DELETE|DESC|DETERMINISTIC|DIRECTORY|DISTINCT|DOUBLE|DROP|DURATION|ELEMENT|ELSE|ELSIF|EMPTY|END|ESCAPE|EXCEPT|EXCEPTION|EXCEPTIONS|EXCLUSIVE|EXECUTE|EXISTS|EXIT|EXTERNAL|FETCH|FINAL|FIRST|FIXED|FLOAT|FOR|FORALL|FORCE|FROM|FUNCTION|GENERAL|GOTO|GRANT|GROUP|HASH|HAVING|HEAP|HIDDEN|HOUR|IDENTIFIED|IF|IMMEDIATE|IMMUTABLE|IN|INCLUDING|INDEX|INDEXES|INDICATOR|INDICES|INFINITE|INSERT|INSTANTIABLE|INT|INTERFACE|INTERSECT|INTERVAL|INTO|INVALIDATE|IS|ISOLATION|JAVA|LANGUAGE|LARGE|LEADING|LENGTH|LEVEL|LIBRARY|LIKE|LIKE2|LIKE4|LIKEC|LIMIT|LIMITED|LOCAL|LOCK|LONG|LOOP|MAP|MAX|MAXLEN|MEMBER|MERGE|MIN|MINUS|MINUTE|MOD|MODE|MODIFY|MONTH|MULTISET|MUTABLE|NAME|NAN|NATIONAL|NATIVE|NCHAR|NEW|NOCOMPRESS|NOCOPY|NOT|NOWAIT|NULL|NUMBER_BASE|OBJECT|OCICOLL|OCIDATE|OCIDATETIME|OCIDURATION|OCIINTERVAL|OCILOBLOCATOR|OCINUMBER|OCIRAW|OCIREF|OCIREFCURSOR|OCIROWID|OCISTRING|OCITYPE|OF|OLD|ON|ONLY|OPAQUE|OPEN|OPERATOR|OPTION|OR|ORACLE|ORADATA|ORDER|ORGANIZATION|ORLANY|ORLVARY|OTHERS|OUT|OVERLAPS|OVERRIDING|PACKAGE|PARALLEL_ENABLE|PARAMETER|PARAMETERS|PARENT|PARTITION|PASCAL|PERSISTABLE|PIPE|PIPELINED|PLUGGABLE|POLYMORPHIC|PRAGMA|PRECISION|PRIOR|PRIVATE|PROCEDURE|PUBLIC|RAISE|RANGE|RAW|READ|RECORD|REF|REFERENCE|RELIES_ON|REM|REMAINDER|RENAME|RESOURCE|RESULT|RESULT_CACHE|RETURN|RETURNING|REVERSE|REVOKE|ROLLBACK|ROW|SAMPLE|SAVE|SAVEPOINT|SB1|SB2|SB4|SECOND|SEGMENT|SELECT|SELF|SEPARATE|SEQUENCE|SERIALIZABLE|SET|SHARE|SHORT|SIZE|SIZE_T|SOME|SPARSE|SQL|SQLCODE|SQLDATA|SQLNAME|SQLSTATE|STANDARD|START|STATIC|STDDEV|STORED|STRING|STRUCT|STYLE|SUBMULTISET|SUBPARTITION|SUBSTITUTABLE|SUBTYPE|SUM|SYNONYM|TABAUTH|TABLE|TDO|THE|THEN|TIME|TIMESTAMP|TIMEZONE_ABBR|TIMEZONE_HOUR|TIMEZONE_MINUTE|TIMEZONE_REGION|TO|TRAILING|TRANSACTION|TRANSACTIONAL|TRUSTED|TYPE|UB1|UB2|UB4|UNDER|UNION|UNIQUE|UNPLUG|UNSIGNED|UNTRUSTED|UPDATE|USE|USING|VALIST|VALUE|VALUES|VARIABLE|VARIANCE|VARRAY|VARYING|VIEW|VIEWS|VOID|WHEN|WHERE|WHILE|WITH|WORK|WRAPPED|WRITE|YEAR|ZONE)\b/i,operator:/:=?|=>|[<>^~!]=|\.\.|\|\||\*\*|[-+*/%<>=@]/}),Prism.languages.insertBefore("plsql","operator",{label:{pattern:/<<\s*\w+\s*>>/,alias:"symbol"}}); \ No newline at end of file diff --git a/tests/languages/plsql/keyword_feature.test b/tests/languages/plsql/keyword_feature.test index e000f7273b..db916e7485 100644 --- a/tests/languages/plsql/keyword_feature.test +++ b/tests/languages/plsql/keyword_feature.test @@ -1,94 +1,181 @@ -ACCESS +A +ACCESSIBLE +ADD AGENT AGGREGATE +ALL +ALTER +AND +ANY ARRAY -ARROW +AS +ASC AT ATTRIBUTE -AUDIT AUTHID +AVG +BEGIN +BETWEEN BFILE_BASE +BINARY BLOB_BASE BLOCK BODY BOTH BOUND +BULK +BY BYTE +C +CALL CALLING +CASCADE +CASE +CHAR CHAR_BASE +CHARACTER +CHARSET CHARSETFORM CHARSETID +CHECK CLOB_BASE -COLAUTH -COLLECT +CLONE +CLOSE CLUSTER CLUSTERS +COLAUTH +COLLECT +COLUMNS +COMMENT +COMMIT +COMMITTED COMPILED COMPRESS +CONNECT CONSTANT CONSTRUCTOR CONTEXT +CONTINUE +CONVERT +COUNT CRASH +CREATE +CREDENTIAL +CURRENT +CURSOR CUSTOMDATUM DANGLING +DATA +DATE DATE_BASE +DAY +DECLARE +DEFAULT DEFINE +DELETE +DESC DETERMINISTIC +DIRECTORY +DISTINCT +DOUBLE +DROP DURATION ELEMENT +ELSE +ELSIF EMPTY +END +ESCAPE +EXCEPT EXCEPTION EXCEPTIONS EXCLUSIVE +EXECUTE +EXISTS +EXIT EXTERNAL +FETCH FINAL +FIRST +FIXED +FLOAT +FOR FORALL -FORM -FOUND +FORCE +FROM +FUNCTION GENERAL +GOTO +GRANT +GROUP +HASH +HAVING HEAP HIDDEN +HOUR IDENTIFIED +IF IMMEDIATE +IMMUTABLE +IN INCLUDING -INCREMENT -INDICATOR +INDEX INDEXES +INDICATOR INDICES INFINITE -INITIAL -ISOPEN +INSERT INSTANTIABLE +INT INTERFACE +INTERSECT +INTERVAL +INTO INVALIDATE +IS +ISOLATION JAVA +LANGUAGE LARGE LEADING LENGTH +LEVEL LIBRARY +LIKE LIKE2 LIKE4 LIKEC +LIMIT LIMITED +LOCAL +LOCK LONG LOOP MAP -MAXEXTENTS +MAX MAXLEN MEMBER +MERGE +MIN MINUS -MLSLABEL +MINUTE +MOD +MODE +MODIFY +MONTH MULTISET +MUTABLE NAME NAN +NATIONAL NATIVE +NCHAR NEW -NOAUDIT NOCOMPRESS NOCOPY -NOTFOUND +NOT NOWAIT -NUMBER +NULL NUMBER_BASE OBJECT OCICOLL @@ -104,62 +191,90 @@ OCIREFCURSOR OCIROWID OCISTRING OCITYPE -OFFLINE -ONLINE +OF +OLD +ON ONLY OPAQUE +OPEN OPERATOR +OPTION +OR ORACLE ORADATA +ORDER ORGANIZATION ORLANY ORLVARY OTHERS +OUT OVERLAPS OVERRIDING PACKAGE PARALLEL_ENABLE PARAMETER PARAMETERS +PARENT +PARTITION PASCAL -PCTFREE +PERSISTABLE PIPE PIPELINED +PLUGGABLE +POLYMORPHIC PRAGMA +PRECISION PRIOR PRIVATE +PROCEDURE +PUBLIC RAISE RANGE RAW +READ RECORD REF REFERENCE +RELIES_ON REM REMAINDER -RESULT +RENAME RESOURCE +RESULT +RESULT_CACHE +RETURN RETURNING REVERSE -ROWID -ROWNUM -ROWTYPE +REVOKE +ROLLBACK +ROW SAMPLE +SAVE +SAVEPOINT SB1 SB2 SB4 +SECOND SEGMENT +SELECT SELF SEPARATE SEQUENCE +SERIALIZABLE +SET +SHARE SHORT SIZE SIZE_T +SOME SPARSE +SQL SQLCODE SQLDATA SQLNAME SQLSTATE STANDARD +START STATIC STDDEV STORED @@ -170,132 +285,238 @@ SUBMULTISET SUBPARTITION SUBSTITUTABLE SUBTYPE -SUCCESSFUL +SUM SYNONYM -SYSDATE TABAUTH +TABLE TDO THE +THEN +TIME +TIMESTAMP TIMEZONE_ABBR TIMEZONE_HOUR TIMEZONE_MINUTE TIMEZONE_REGION +TO TRAILING -TRANSAC +TRANSACTION TRANSACTIONAL TRUSTED +TYPE UB1 UB2 UB4 -UID UNDER +UNION +UNIQUE +UNPLUG +UNSIGNED UNTRUSTED -VALIDATE +UPDATE +USE +USING VALIST -VARCHAR2 +VALUE +VALUES VARIABLE VARIANCE VARRAY +VARYING +VIEW VIEWS VOID -WHENEVER +WHEN +WHERE +WHILE +WITH +WORK WRAPPED +WRITE +YEAR ZONE ---------------------------------------------------- [ - ["keyword", "ACCESS"], + ["keyword", "A"], + ["keyword", "ACCESSIBLE"], + ["keyword", "ADD"], ["keyword", "AGENT"], ["keyword", "AGGREGATE"], + ["keyword", "ALL"], + ["keyword", "ALTER"], + ["keyword", "AND"], + ["keyword", "ANY"], ["keyword", "ARRAY"], - ["keyword", "ARROW"], + ["keyword", "AS"], + ["keyword", "ASC"], ["keyword", "AT"], ["keyword", "ATTRIBUTE"], - ["keyword", "AUDIT"], ["keyword", "AUTHID"], + ["keyword", "AVG"], + ["keyword", "BEGIN"], + ["keyword", "BETWEEN"], ["keyword", "BFILE_BASE"], + ["keyword", "BINARY"], ["keyword", "BLOB_BASE"], ["keyword", "BLOCK"], ["keyword", "BODY"], ["keyword", "BOTH"], ["keyword", "BOUND"], + ["keyword", "BULK"], + ["keyword", "BY"], ["keyword", "BYTE"], + ["keyword", "C"], + ["keyword", "CALL"], ["keyword", "CALLING"], + ["keyword", "CASCADE"], + ["keyword", "CASE"], + ["keyword", "CHAR"], ["keyword", "CHAR_BASE"], + ["keyword", "CHARACTER"], + ["keyword", "CHARSET"], ["keyword", "CHARSETFORM"], ["keyword", "CHARSETID"], + ["keyword", "CHECK"], ["keyword", "CLOB_BASE"], - ["keyword", "COLAUTH"], - ["keyword", "COLLECT"], + ["keyword", "CLONE"], + ["keyword", "CLOSE"], ["keyword", "CLUSTER"], ["keyword", "CLUSTERS"], + ["keyword", "COLAUTH"], + ["keyword", "COLLECT"], + ["keyword", "COLUMNS"], + ["keyword", "COMMENT"], + ["keyword", "COMMIT"], + ["keyword", "COMMITTED"], ["keyword", "COMPILED"], ["keyword", "COMPRESS"], + ["keyword", "CONNECT"], ["keyword", "CONSTANT"], ["keyword", "CONSTRUCTOR"], ["keyword", "CONTEXT"], + ["keyword", "CONTINUE"], + ["keyword", "CONVERT"], + ["keyword", "COUNT"], ["keyword", "CRASH"], + ["keyword", "CREATE"], + ["keyword", "CREDENTIAL"], + ["keyword", "CURRENT"], + ["keyword", "CURSOR"], ["keyword", "CUSTOMDATUM"], ["keyword", "DANGLING"], + ["keyword", "DATA"], + ["keyword", "DATE"], ["keyword", "DATE_BASE"], + ["keyword", "DAY"], + ["keyword", "DECLARE"], + ["keyword", "DEFAULT"], ["keyword", "DEFINE"], + ["keyword", "DELETE"], + ["keyword", "DESC"], ["keyword", "DETERMINISTIC"], + ["keyword", "DIRECTORY"], + ["keyword", "DISTINCT"], + ["keyword", "DOUBLE"], + ["keyword", "DROP"], ["keyword", "DURATION"], ["keyword", "ELEMENT"], + ["keyword", "ELSE"], + ["keyword", "ELSIF"], ["keyword", "EMPTY"], + ["keyword", "END"], + ["keyword", "ESCAPE"], + ["keyword", "EXCEPT"], ["keyword", "EXCEPTION"], ["keyword", "EXCEPTIONS"], ["keyword", "EXCLUSIVE"], + ["keyword", "EXECUTE"], + ["keyword", "EXISTS"], + ["keyword", "EXIT"], ["keyword", "EXTERNAL"], + ["keyword", "FETCH"], ["keyword", "FINAL"], + ["keyword", "FIRST"], + ["keyword", "FIXED"], + ["keyword", "FLOAT"], + ["keyword", "FOR"], ["keyword", "FORALL"], - ["keyword", "FORM"], - ["keyword", "FOUND"], + ["keyword", "FORCE"], + ["keyword", "FROM"], + ["keyword", "FUNCTION"], ["keyword", "GENERAL"], + ["keyword", "GOTO"], + ["keyword", "GRANT"], + ["keyword", "GROUP"], + ["keyword", "HASH"], + ["keyword", "HAVING"], ["keyword", "HEAP"], ["keyword", "HIDDEN"], + ["keyword", "HOUR"], ["keyword", "IDENTIFIED"], + ["keyword", "IF"], ["keyword", "IMMEDIATE"], + ["keyword", "IMMUTABLE"], + ["keyword", "IN"], ["keyword", "INCLUDING"], - ["keyword", "INCREMENT"], - ["keyword", "INDICATOR"], + ["keyword", "INDEX"], ["keyword", "INDEXES"], + ["keyword", "INDICATOR"], ["keyword", "INDICES"], ["keyword", "INFINITE"], - ["keyword", "INITIAL"], - ["keyword", "ISOPEN"], + ["keyword", "INSERT"], ["keyword", "INSTANTIABLE"], + ["keyword", "INT"], ["keyword", "INTERFACE"], + ["keyword", "INTERSECT"], + ["keyword", "INTERVAL"], + ["keyword", "INTO"], ["keyword", "INVALIDATE"], + ["keyword", "IS"], + ["keyword", "ISOLATION"], ["keyword", "JAVA"], + ["keyword", "LANGUAGE"], ["keyword", "LARGE"], ["keyword", "LEADING"], ["keyword", "LENGTH"], + ["keyword", "LEVEL"], ["keyword", "LIBRARY"], + ["keyword", "LIKE"], ["keyword", "LIKE2"], ["keyword", "LIKE4"], ["keyword", "LIKEC"], + ["keyword", "LIMIT"], ["keyword", "LIMITED"], + ["keyword", "LOCAL"], + ["keyword", "LOCK"], ["keyword", "LONG"], ["keyword", "LOOP"], ["keyword", "MAP"], - ["keyword", "MAXEXTENTS"], + ["keyword", "MAX"], ["keyword", "MAXLEN"], ["keyword", "MEMBER"], + ["keyword", "MERGE"], + ["keyword", "MIN"], ["keyword", "MINUS"], - ["keyword", "MLSLABEL"], + ["keyword", "MINUTE"], + ["keyword", "MOD"], + ["keyword", "MODE"], + ["keyword", "MODIFY"], + ["keyword", "MONTH"], ["keyword", "MULTISET"], + ["keyword", "MUTABLE"], ["keyword", "NAME"], ["keyword", "NAN"], + ["keyword", "NATIONAL"], ["keyword", "NATIVE"], + ["keyword", "NCHAR"], ["keyword", "NEW"], - ["keyword", "NOAUDIT"], ["keyword", "NOCOMPRESS"], ["keyword", "NOCOPY"], - ["keyword", "NOTFOUND"], + ["keyword", "NOT"], ["keyword", "NOWAIT"], - ["keyword", "NUMBER"], + ["keyword", "NULL"], ["keyword", "NUMBER_BASE"], ["keyword", "OBJECT"], ["keyword", "OCICOLL"], @@ -311,62 +532,90 @@ ZONE ["keyword", "OCIROWID"], ["keyword", "OCISTRING"], ["keyword", "OCITYPE"], - ["keyword", "OFFLINE"], - ["keyword", "ONLINE"], + ["keyword", "OF"], + ["keyword", "OLD"], + ["keyword", "ON"], ["keyword", "ONLY"], ["keyword", "OPAQUE"], + ["keyword", "OPEN"], ["keyword", "OPERATOR"], + ["keyword", "OPTION"], + ["keyword", "OR"], ["keyword", "ORACLE"], ["keyword", "ORADATA"], + ["keyword", "ORDER"], ["keyword", "ORGANIZATION"], ["keyword", "ORLANY"], ["keyword", "ORLVARY"], ["keyword", "OTHERS"], + ["keyword", "OUT"], ["keyword", "OVERLAPS"], ["keyword", "OVERRIDING"], ["keyword", "PACKAGE"], ["keyword", "PARALLEL_ENABLE"], ["keyword", "PARAMETER"], ["keyword", "PARAMETERS"], + ["keyword", "PARENT"], + ["keyword", "PARTITION"], ["keyword", "PASCAL"], - ["keyword", "PCTFREE"], + ["keyword", "PERSISTABLE"], ["keyword", "PIPE"], ["keyword", "PIPELINED"], + ["keyword", "PLUGGABLE"], + ["keyword", "POLYMORPHIC"], ["keyword", "PRAGMA"], + ["keyword", "PRECISION"], ["keyword", "PRIOR"], ["keyword", "PRIVATE"], + ["keyword", "PROCEDURE"], + ["keyword", "PUBLIC"], ["keyword", "RAISE"], ["keyword", "RANGE"], ["keyword", "RAW"], + ["keyword", "READ"], ["keyword", "RECORD"], ["keyword", "REF"], ["keyword", "REFERENCE"], + ["keyword", "RELIES_ON"], ["keyword", "REM"], ["keyword", "REMAINDER"], - ["keyword", "RESULT"], + ["keyword", "RENAME"], ["keyword", "RESOURCE"], + ["keyword", "RESULT"], + ["keyword", "RESULT_CACHE"], + ["keyword", "RETURN"], ["keyword", "RETURNING"], ["keyword", "REVERSE"], - ["keyword", "ROWID"], - ["keyword", "ROWNUM"], - ["keyword", "ROWTYPE"], + ["keyword", "REVOKE"], + ["keyword", "ROLLBACK"], + ["keyword", "ROW"], ["keyword", "SAMPLE"], + ["keyword", "SAVE"], + ["keyword", "SAVEPOINT"], ["keyword", "SB1"], ["keyword", "SB2"], ["keyword", "SB4"], + ["keyword", "SECOND"], ["keyword", "SEGMENT"], + ["keyword", "SELECT"], ["keyword", "SELF"], ["keyword", "SEPARATE"], ["keyword", "SEQUENCE"], + ["keyword", "SERIALIZABLE"], + ["keyword", "SET"], + ["keyword", "SHARE"], ["keyword", "SHORT"], ["keyword", "SIZE"], ["keyword", "SIZE_T"], + ["keyword", "SOME"], ["keyword", "SPARSE"], + ["keyword", "SQL"], ["keyword", "SQLCODE"], ["keyword", "SQLDATA"], ["keyword", "SQLNAME"], ["keyword", "SQLSTATE"], ["keyword", "STANDARD"], + ["keyword", "START"], ["keyword", "STATIC"], ["keyword", "STDDEV"], ["keyword", "STORED"], @@ -377,39 +626,54 @@ ZONE ["keyword", "SUBPARTITION"], ["keyword", "SUBSTITUTABLE"], ["keyword", "SUBTYPE"], - ["keyword", "SUCCESSFUL"], + ["keyword", "SUM"], ["keyword", "SYNONYM"], - ["keyword", "SYSDATE"], ["keyword", "TABAUTH"], + ["keyword", "TABLE"], ["keyword", "TDO"], ["keyword", "THE"], + ["keyword", "THEN"], + ["keyword", "TIME"], + ["keyword", "TIMESTAMP"], ["keyword", "TIMEZONE_ABBR"], ["keyword", "TIMEZONE_HOUR"], ["keyword", "TIMEZONE_MINUTE"], ["keyword", "TIMEZONE_REGION"], + ["keyword", "TO"], ["keyword", "TRAILING"], - ["keyword", "TRANSAC"], + ["keyword", "TRANSACTION"], ["keyword", "TRANSACTIONAL"], ["keyword", "TRUSTED"], + ["keyword", "TYPE"], ["keyword", "UB1"], ["keyword", "UB2"], ["keyword", "UB4"], - ["keyword", "UID"], ["keyword", "UNDER"], + ["keyword", "UNION"], + ["keyword", "UNIQUE"], + ["keyword", "UNPLUG"], + ["keyword", "UNSIGNED"], ["keyword", "UNTRUSTED"], - ["keyword", "VALIDATE"], + ["keyword", "UPDATE"], + ["keyword", "USE"], + ["keyword", "USING"], ["keyword", "VALIST"], - ["keyword", "VARCHAR2"], + ["keyword", "VALUE"], + ["keyword", "VALUES"], ["keyword", "VARIABLE"], ["keyword", "VARIANCE"], ["keyword", "VARRAY"], + ["keyword", "VARYING"], + ["keyword", "VIEW"], ["keyword", "VIEWS"], ["keyword", "VOID"], - ["keyword", "WHENEVER"], + ["keyword", "WHEN"], + ["keyword", "WHERE"], + ["keyword", "WHILE"], + ["keyword", "WITH"], + ["keyword", "WORK"], ["keyword", "WRAPPED"], + ["keyword", "WRITE"], + ["keyword", "YEAR"], ["keyword", "ZONE"] ] - ----------------------------------------------------- - -Checks for all keywords. \ No newline at end of file diff --git a/tests/languages/plsql/label_feature.test b/tests/languages/plsql/label_feature.test new file mode 100644 index 0000000000..478b3cb1c2 --- /dev/null +++ b/tests/languages/plsql/label_feature.test @@ -0,0 +1,7 @@ +<< foo >> + +---------------------------------------------------- + +[ + ["label", "<< foo >>"] +] diff --git a/tests/languages/plsql/operator_feature.test b/tests/languages/plsql/operator_feature.test index 1422bca469..3935118d32 100644 --- a/tests/languages/plsql/operator_feature.test +++ b/tests/languages/plsql/operator_feature.test @@ -1,11 +1,42 @@ -:= ++ - * / ** +:= : +=> +% +|| +.. + += != <> ~= ^= < > <= >= +@ ---------------------------------------------------- [ - ["operator", ":="] + ["operator", "+"], + ["operator", "-"], + ["operator", "*"], + ["operator", "/"], + ["operator", "**"], + ["operator", ":="], + ["operator", ":"], + ["operator", "=>"], + ["operator", "%"], + ["operator", "||"], + ["operator", ".."], + + ["operator", "="], + ["operator", "!="], + ["operator", "<"], + ["operator", ">"], + ["operator", "~="], + ["operator", "^="], + ["operator", "<"], + ["operator", ">"], + ["operator", "<="], + ["operator", ">="], + + ["operator", "@"] ] ---------------------------------------------------- -Checks for all operators. \ No newline at end of file +Checks for all operators.