diff options
| author | Christian Clason <c.clason@uni-graz.at> | 2023-06-12 09:54:30 -0600 |
|---|---|---|
| committer | Christian Clason <c.clason@uni-graz.at> | 2025-05-12 18:43:40 +0200 |
| commit | 692b051b09935653befdb8f7ba8afdb640adf17b (patch) | |
| tree | 167162b6b129ae04f68c5735078521a72917c742 /runtime/queries/pascal | |
| parent | feat(c-family): inherit injections (diff) | |
| download | nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.gz nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.bz2 nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.lz nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.xz nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.zst nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.zip | |
feat!: drop modules, general refactor and cleanup
Diffstat (limited to 'runtime/queries/pascal')
| -rw-r--r-- | runtime/queries/pascal/folds.scm | 31 | ||||
| -rw-r--r-- | runtime/queries/pascal/highlights.scm | 524 | ||||
| -rw-r--r-- | runtime/queries/pascal/indents.scm | 33 | ||||
| -rw-r--r-- | runtime/queries/pascal/injections.scm | 5 | ||||
| -rw-r--r-- | runtime/queries/pascal/locals.scm | 54 |
5 files changed, 647 insertions, 0 deletions
diff --git a/runtime/queries/pascal/folds.scm b/runtime/queries/pascal/folds.scm new file mode 100644 index 000000000..8fcde3ac0 --- /dev/null +++ b/runtime/queries/pascal/folds.scm @@ -0,0 +1,31 @@ +[ + (interface) + (implementation) + (initialization) + (finalization) + (if) + (ifElse) + (while) + (repeat) + (for) + (foreach) + (try) + (case) + (caseCase) + (asm) + (with) + (declVar) + (declConst) + (declEnum) + (declProcRef) + (declExports) + (declProcRef) + (declType) + (defProc) + (declField) + (declProp) + (comment) +] @fold + +(interface + (declProc) @fold) diff --git a/runtime/queries/pascal/highlights.scm b/runtime/queries/pascal/highlights.scm new file mode 100644 index 000000000..d6014ee1d --- /dev/null +++ b/runtime/queries/pascal/highlights.scm @@ -0,0 +1,524 @@ +; -- Keywords +[ + (kProgram) + (kLibrary) + (kUnit) + (kBegin) + (kEnd) + (kAsm) + (kVar) + (kThreadvar) + (kConst) + (kConstref) + (kResourcestring) + (kOut) + (kType) + (kLabel) + (kExports) + (kProperty) + (kRead) + (kWrite) + (kImplements) + (kClass) + (kInterface) + (kObject) + (kRecord) + (kObjcclass) + (kObjccategory) + (kObjcprotocol) + (kArray) + (kFile) + (kString) + (kSet) + (kOf) + (kHelper) + (kInherited) + (kGeneric) + (kSpecialize) + (kFunction) + (kProcedure) + (kConstructor) + (kDestructor) + (kOperator) + (kReference) + (kInterface) + (kImplementation) + (kInitialization) + (kFinalization) + (kTry) + (kExcept) + (kFinally) + (kRaise) + (kOn) + (kCase) + (kWith) + (kGoto) +] @keyword + +[ + (kFor) + (kTo) + (kDownto) + (kDo) + (kWhile) + (kRepeat) + (kUntil) +] @keyword.repeat + +[ + (kIf) + (kThen) + (kElse) +] @keyword.conditional + +[ + (kPublished) + (kPublic) + (kProtected) + (kPrivate) + (kStrict) + (kRequired) + (kOptional) +] @keyword.modifier + +[ + (kPacked) + (kAbsolute) +] @keyword.modifier + +(kUses) @keyword.import + +; -- Attributes +[ + (kDefault) + (kIndex) + (kNodefault) + (kStored) + (kStatic) + (kVirtual) + (kAbstract) + (kSealed) + (kDynamic) + (kOverride) + (kOverload) + (kReintroduce) + (kInline) + (kForward) + (kStdcall) + (kCdecl) + (kCppdecl) + (kPascal) + (kRegister) + (kMwpascal) + (kExternal) + (kName) + (kMessage) + (kDeprecated) + (kExperimental) + (kPlatform) + (kUnimplemented) + (kCvar) + (kExport) + (kFar) + (kNear) + (kSafecall) + (kAssembler) + (kNostackframe) + (kInterrupt) + (kNoreturn) + (kIocheck) + (kLocal) + (kHardfloat) + (kSoftfloat) + (kMs_abi_default) + (kMs_abi_cdecl) + (kSaveregisters) + (kSysv_abi_default) + (kSysv_abi_cdecl) + (kVectorcall) + (kVarargs) + (kWinapi) + (kAlias) + (kDelayed) + (rttiAttributes) + (procAttribute) +] @attribute + +(procAttribute + (kPublic) @attribute) + +; -- Punctuation & operators +[ + "(" + ")" + "[" + "]" +] @punctuation.bracket + +[ + ";" + "," + ":" + (kEndDot) +] @punctuation.delimiter + +".." @punctuation.special + +[ + (kDot) + (kAdd) + (kSub) + (kMul) + (kFdiv) + (kAssign) + (kAssignAdd) + (kAssignSub) + (kAssignMul) + (kAssignDiv) + (kEq) + (kLt) + (kLte) + (kGt) + (kGte) + (kNeq) + (kAt) + (kHat) +] @operator + +[ + (kOr) + (kXor) + (kDiv) + (kMod) + (kAnd) + (kShl) + (kShr) + (kNot) + (kIs) + (kAs) + (kIn) +] @keyword.operator + +; -- Builtin constants +[ + (kTrue) + (kFalse) +] @boolean + +(kNil) @constant.builtin + +; -- Literals +(literalNumber) @number + +(literalString) @string + +; -- Variables +(exprBinary + (identifier) @variable) + +(exprUnary + (identifier) @variable) + +(assignment + (identifier) @variable) + +(exprBrackets + (identifier) @variable) + +(exprParens + (identifier) @variable) + +(exprDot + (identifier) @variable) + +(exprTpl + (identifier) @variable) + +(exprArgs + (identifier) @variable) + +(defaultValue + (identifier) @variable) + +; -- Comments +(comment) @comment @spell + +((comment) @comment.documentation + (#lua-match? @comment.documentation "^///[^/]")) + +((comment) @comment.documentation + (#lua-match? @comment.documentation "^///$")) + +((comment) @comment.documentation + . + [ + (unit) + (declProc) + ]) + +(declTypes + (comment) @comment.documentation + . + (declType)) + +(declSection + (comment) @comment.documentation + . + [ + (declField) + (declProc) + ]) + +(declEnum + (comment) @comment.documentation + . + (declEnumValue)) + +(declConsts + (comment) @comment.documentation + . + (declConst)) + +(declVars + (comment) @comment.documentation + . + (declVar)) + +(pp) @keyword.directive + +; -- Type declaration +(declType + name: (identifier) @type) + +(declType + name: (genericTpl + entity: (identifier) @type)) + +; -- Procedure & function declarations +; foobar +(declProc + name: (identifier) @function) + +; foobar<t> +(declProc + name: (genericTpl + entity: (identifier) @function)) + +; foo.bar +(declProc + name: (genericDot + rhs: (identifier) @function)) + +; foo.bar<t> +(declProc + name: (genericDot + rhs: (genericTpl + entity: (identifier) @function))) + +; Treat property declarations like functions +(declProp + name: (identifier) @function) + +(declProp + getter: (identifier) @variable.member) + +(declProp + setter: (identifier) @variable.member) + +; -- Function parameters +(declArg + name: (identifier) @variable.parameter) + +; -- Template parameters +(genericArg + name: (identifier) @variable.parameter) + +(genericArg + type: (typeref) @type) + +(declProc + name: (genericDot + lhs: (identifier) @type)) + +(declType + (genericDot + (identifier) @type)) + +(genericDot + (genericTpl + (identifier) @type)) + +(genericDot + (genericDot + (identifier) @type)) + +(genericTpl + entity: (identifier) @type) + +(genericTpl + entity: (genericDot + (identifier) @type)) + +; -- Exception parameters +(exceptionHandler + variable: (identifier) @variable.parameter) + +; -- Type usage +(typeref) @type + +; -- Constant usage +[ + (caseLabel) + (label) +] @constant + +(procAttribute + (identifier) @constant) + +(procExternal + (identifier) @constant) + +; -- Variable & constant declarations +; (This is only questionable because we cannot detect types of identifiers +; declared in other units, so the results will be inconsistent) +(declVar + name: (identifier) @variable) + +(declConst + name: (identifier) @constant) + +(declEnumValue + name: (identifier) @constant) + +; -- Fields +(exprDot + rhs: (identifier) @variable.member) + +(exprDot + rhs: (exprDot) @variable.member) + +(declClass + (declField + name: (identifier) @variable.member)) + +(declSection + (declField + name: (identifier) @variable.member)) + +(declSection + (declVars + (declVar + name: (identifier) @variable.member))) + +(recInitializerField + name: (identifier) @variable.member) + +; ---------------------------------------------- ;;; +; EVERYTHING BELOW THIS IS OF QUESTIONABLE VALUE ;;; +; ---------------------------------------------- ;;; +; -- Procedure name in calls with parentheses +; (Pascal doesn't require parentheses for procedure calls, so this will not +; detect all calls) +; foobar +(exprCall + entity: (identifier) @function) + +; foobar<t> +(exprCall + entity: (exprTpl + entity: (identifier) @function)) + +; foo.bar +(exprCall + entity: (exprDot + rhs: (identifier) @function)) + +; foo.bar<t> +(exprCall + entity: (exprDot + rhs: (exprTpl + entity: (identifier) @function))) + +(inherited) @function + +; -- Heuristic for procedure/function calls without parentheses +; (If a statement consists only of an identifier, assume it's a procedure) +; (This will still not match all procedure calls, and also may produce false +; positives in rare cases, but only for nonsensical code) +(statement + (identifier) @function) + +(statement + (exprDot + rhs: (identifier) @function)) + +(statement + (exprTpl + entity: (identifier) @function)) + +(statement + (exprDot + rhs: (exprTpl + entity: (identifier) @function))) + +; -- Break, Continue & Exit +; (Not ideal: ideally, there would be a way to check if these special +; identifiers are shadowed by a local variable) +(statement + ((identifier) @keyword.return + (#lua-match? @keyword.return "^[eE][xX][iI][tT]$"))) + +(statement + (exprCall + entity: ((identifier) @keyword.return + (#lua-match? @keyword.return "^[eE][xX][iI][tT]$")))) + +(statement + ((identifier) @keyword.repeat + (#lua-match? @keyword.repeat "^[bB][rR][eE][aA][kK]$"))) + +(statement + ((identifier) @keyword.repeat + (#lua-match? @keyword.repeat "^[cC][oO][nN][tT][iI][nN][uU][eE]$"))) + +; -- Identifier type inference +; VERY QUESTIONABLE: Highlighting of identifiers based on spelling +(exprBinary + ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) + +(exprUnary + ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) + +(assignment + rhs: ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) + +(exprBrackets + ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) + +(exprParens + ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) + +(exprDot + rhs: ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) + +(exprTpl + args: ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) + +(exprArgs + ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) + +(declEnumValue + ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) + +(defaultValue + ((identifier) @constant + (#match? @constant "^[A-Z][A-Z0-9_]+$|^[a-z]{2,3}[A-Z].+$"))) diff --git a/runtime/queries/pascal/indents.scm b/runtime/queries/pascal/indents.scm new file mode 100644 index 000000000..879e7b86f --- /dev/null +++ b/runtime/queries/pascal/indents.scm @@ -0,0 +1,33 @@ +[ + (statement) + (declVars) + (declConsts) + (declTypes) + (declProc) + (declArgs) + (declUses) + (declClass) + (exprArgs) + (exprSubscript) + (exprBrackets) + (exprParens) + (recInitializer) + (arrInitializer) + (defaultValue) +] @indent.begin + +(defProc + (block) @indent.begin) + +[ + (kEnd) + (kFinally) + (kDo) + (kUntil) + (kExcept) + (kElse) + (kThen) + (declSection) + "]" + ")" +] @indent.branch diff --git a/runtime/queries/pascal/injections.scm b/runtime/queries/pascal/injections.scm new file mode 100644 index 000000000..1f6e475c8 --- /dev/null +++ b/runtime/queries/pascal/injections.scm @@ -0,0 +1,5 @@ +((comment) @injection.content + (#set! injection.language "comment")) + +((asmBody) @injection.content + (#set! injection.language "asm")) diff --git a/runtime/queries/pascal/locals.scm b/runtime/queries/pascal/locals.scm new file mode 100644 index 000000000..d74d54ad4 --- /dev/null +++ b/runtime/queries/pascal/locals.scm @@ -0,0 +1,54 @@ +(root) @local.scope + +(defProc) @local.scope + +(lambda) @local.scope + +(interface + (declProc) @local.scope) + +(declSection + (declProc) @local.scope) + +(declClass + (declProc) @local.scope) + +(declHelper + (declProc) @local.scope) + +(declProcRef) @local.scope + +(exceptionHandler) @local.scope + +(exceptionHandler + variable: (identifier) @local.definition) + +(declArg + name: (identifier) @local.definition) + +(declVar + name: (identifier) @local.definition) + +(declConst + name: (identifier) @local.definition) + +(declLabel + name: (identifier) @local.definition) + +(genericArg + name: (identifier) @local.definition) + +(declEnumValue + name: (identifier) @local.definition) + +(declType + name: (identifier) @local.definition) + +(declType + name: (genericTpl + entity: (identifier) @local.definition)) + +(declProc + name: (identifier) @local.definition) + +(identifier) @local.reference |
