From 3df6aee84d7e14da5ec5d59125ea3a540dacab48 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Tue, 20 Feb 2024 16:18:40 +0100 Subject: [PATCH 01/14] chore: Upgrade to slang v0.11.0 --- client/scripts/bundle.js | 20 +-- package-lock.json | 160 +++++++++--------- server/package.json | 2 +- server/src/parser/slangHelpers.ts | 2 +- .../services/documentSymbol/SymbolVisitor.ts | 3 +- .../documentSymbol/onDocumentSymbol.ts | 6 +- .../ContractDefinitionHighlighter.ts | 2 +- .../highlighters/CustomTypeHighlighter.ts | 2 +- .../highlighters/EnumDefinitionHighlighter.ts | 2 +- .../ErrorDefinitionHighlighter.ts | 2 +- .../EventDefinitionHighlighter.ts | 2 +- .../highlighters/EventEmissionHighlighter.ts | 2 +- .../highlighters/FunctionCallHighlighter.ts | 2 +- .../FunctionDefinitionHighlighter.ts | 2 +- .../InterfaceDefinitionHighlighter.ts | 2 +- .../LibraryDefinitionHighlighter.ts | 2 +- .../StructDefinitionHighlighter.ts | 2 +- ...inedValueTypeDefinitionHighlighter copy.ts | 2 +- .../semanticHighlight/onSemanticTokensFull.ts | 8 +- 19 files changed, 111 insertions(+), 114 deletions(-) diff --git a/client/scripts/bundle.js b/client/scripts/bundle.js index 64eb9d99..699aee9a 100755 --- a/client/scripts/bundle.js +++ b/client/scripts/bundle.js @@ -200,16 +200,16 @@ async function main() { "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", - "@nomicfoundation/slang": "0.10.1", - "@nomicfoundation/slang-darwin-arm64": "0.10.1", - "@nomicfoundation/slang-win32-arm64-msvc": "0.10.1", - "@nomicfoundation/slang-linux-arm64-gnu": "0.10.1", - "@nomicfoundation/slang-linux-arm64-musl": "0.10.1", - "@nomicfoundation/slang-win32-ia32-msvc": "0.10.1", - "@nomicfoundation/slang-darwin-x64": "0.10.1", - "@nomicfoundation/slang-win32-x64-msvc": "0.10.1", - "@nomicfoundation/slang-linux-x64-gnu": "0.10.1", - "@nomicfoundation/slang-linux-x64-musl": "0.10.1", + "@nomicfoundation/slang": "0.11.0", + "@nomicfoundation/slang-darwin-arm64": "0.11.0", + "@nomicfoundation/slang-win32-arm64-msvc": "0.11.0", + "@nomicfoundation/slang-linux-arm64-gnu": "0.11.0", + "@nomicfoundation/slang-linux-arm64-musl": "0.11.0", + "@nomicfoundation/slang-win32-ia32-msvc": "0.11.0", + "@nomicfoundation/slang-darwin-x64": "0.11.0", + "@nomicfoundation/slang-win32-x64-msvc": "0.11.0", + "@nomicfoundation/slang-linux-x64-gnu": "0.11.0", + "@nomicfoundation/slang-linux-x64-musl": "0.11.0", }, }) ); diff --git a/package-lock.json b/package-lock.json index 4e3cd0dc..361714ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2667,28 +2667,28 @@ } }, "node_modules/@nomicfoundation/slang": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.10.1.tgz", - "integrity": "sha512-qU9eHCExF6Hix4KPXHv1oQN1vWYGeOrHJXZ+uxroCMZ4Tf5P/kSrxVI2SqnVmwpSdxrwJdDQ9cI8Fe6PV7YDCA==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.11.0.tgz", + "integrity": "sha512-HHPKEmvF7IHbY/70NqC5Hq8eGA9o7QvhpSKhokgbtYyHsxYG4ELqBZnwjIZj3R0KLE9zVC/lyEulGHU3FSFKhg==", "engines": { "node": ">= 10" }, "optionalDependencies": { - "@nomicfoundation/slang-darwin-arm64": "0.10.1", - "@nomicfoundation/slang-darwin-x64": "0.10.1", - "@nomicfoundation/slang-linux-arm64-gnu": "0.10.1", - "@nomicfoundation/slang-linux-arm64-musl": "0.10.1", - "@nomicfoundation/slang-linux-x64-gnu": "0.10.1", - "@nomicfoundation/slang-linux-x64-musl": "0.10.1", - "@nomicfoundation/slang-win32-arm64-msvc": "0.10.1", - "@nomicfoundation/slang-win32-ia32-msvc": "0.10.1", - "@nomicfoundation/slang-win32-x64-msvc": "0.10.1" + "@nomicfoundation/slang-darwin-arm64": "0.11.0", + "@nomicfoundation/slang-darwin-x64": "0.11.0", + "@nomicfoundation/slang-linux-arm64-gnu": "0.11.0", + "@nomicfoundation/slang-linux-arm64-musl": "0.11.0", + "@nomicfoundation/slang-linux-x64-gnu": "0.11.0", + "@nomicfoundation/slang-linux-x64-musl": "0.11.0", + "@nomicfoundation/slang-win32-arm64-msvc": "0.11.0", + "@nomicfoundation/slang-win32-ia32-msvc": "0.11.0", + "@nomicfoundation/slang-win32-x64-msvc": "0.11.0" } }, "node_modules/@nomicfoundation/slang-darwin-arm64": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.10.1.tgz", - "integrity": "sha512-lvXEs9qQS5Qm0vUhy5NwTlvkTMH7cbm2//Z80jhaBqIJlQFUW/0A4JqK/9RAji8ZuOtGC2QT9LnOk2VoNQGiwg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.11.0.tgz", + "integrity": "sha512-L8cYLkt7iLYDESmff7vYrlkEe8hwjpLr4ovB2HmhJW/uniYy3l+MeoOmeTeNbe4a1ZNLrVCDnEm7Mc6Ee75yyw==", "cpu": [ "arm64" ], @@ -2701,9 +2701,9 @@ } }, "node_modules/@nomicfoundation/slang-darwin-x64": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.10.1.tgz", - "integrity": "sha512-YV8OZyA++MZebNc5j62bXvQKKT8x6jg5kR2O332HHLZb/5kYWJ0PQYw61W9/DwnFFhBwVT65AZ+cJdM0LQJxog==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.11.0.tgz", + "integrity": "sha512-OPuc1z4HzaEvOWLClcGbWJUNEbsB1Yaje+HqPpvE82F76LUr+HeJJu9wzd8Y97R3A10r803V665T0+RFlOjw2A==", "cpu": [ "x64" ], @@ -2716,9 +2716,9 @@ } }, "node_modules/@nomicfoundation/slang-linux-arm64-gnu": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.10.1.tgz", - "integrity": "sha512-6vJmGMa6yvrf5PvO9lxnd5mfFtrP+1eTVhNBjbAazaSFKfpDrjR4b29JyLwREcialj/+L3prvEUjXRchIj1Gqg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.11.0.tgz", + "integrity": "sha512-vBoBYljYwzkupMMer6FNqe4aXXNJjoItWkY5fop2pz/PzLHj5hr81u8PkdRMUIk/LMvtiyo8XNYb0apsR9UBGA==", "cpu": [ "arm64" ], @@ -2731,9 +2731,9 @@ } }, "node_modules/@nomicfoundation/slang-linux-arm64-musl": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.10.1.tgz", - "integrity": "sha512-cPX5ybj6A46mb9pros8Kwpzv/Lpkp2q+gS+s8Zg62NkogvSqswDZDlBAZ7FUZTzGpMfhZJn75itPgGUCAoImUA==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.11.0.tgz", + "integrity": "sha512-leHGCunMy75SINbd/utBZx+H7jkBFHAQb8Qvh8xYB2mXKRhUxefbMQFM34xFbGJEI6IDOBJu06v81lzHv44lPA==", "cpu": [ "arm64" ], @@ -2746,9 +2746,9 @@ } }, "node_modules/@nomicfoundation/slang-linux-x64-gnu": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.10.1.tgz", - "integrity": "sha512-sZvtSgb5LencgjqfLkFlhrYQgM8QoSy2t0IcCG1JLA8MXWlYRN/F3nDm3zKSmuOwmtFIzvbc7X/wkkGCNsSQ9g==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.11.0.tgz", + "integrity": "sha512-YGP+eIhbGpJXQql2QmTXIRCSAqYtbYhIu79zM2pofVzFovIZ1ypjbrsn/jvhZhYoYZfEPYBGvPMO682/jNBxvQ==", "cpu": [ "x64" ], @@ -2761,9 +2761,9 @@ } }, "node_modules/@nomicfoundation/slang-linux-x64-musl": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.10.1.tgz", - "integrity": "sha512-S2WnY4tMCWBPaAQcPoRDZ6M01hKgE1R22n7sqnF7KI2o0Khsm9fnlAZ/2ct4ioe2Je4hyHrNhms8/534P8dQuw==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.11.0.tgz", + "integrity": "sha512-dUHKwLCIqqmiRmqNYbKoCmTzAn13pCMFCcIfqLKiO/ZCMSZgOzxHqaB95u7FwdhWjebjoqlUTyBVGDv3xrSX7A==", "cpu": [ "x64" ], @@ -2776,9 +2776,9 @@ } }, "node_modules/@nomicfoundation/slang-win32-arm64-msvc": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.10.1.tgz", - "integrity": "sha512-diu8P/UdSdn1p+XKQK5NgZV2RTZWsL2kHLO+n0bZ3Z4lTojL8drDhMXIXzMcwRUuJdXv/NkO97dsBwM+CyhGiw==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.11.0.tgz", + "integrity": "sha512-w9vb0B3gY39KcqchWzy3uYmDkgDiyqqoWjY+tmkZLj2lFnGFzFY0I/sKUt8QlBpf0v8s+8+a7236SL33JIItrA==", "cpu": [ "arm64" ], @@ -2791,9 +2791,9 @@ } }, "node_modules/@nomicfoundation/slang-win32-ia32-msvc": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.10.1.tgz", - "integrity": "sha512-oRNDHADhWFq6D2l8UacJ+ExxJO7sYKOMn4IlYGulyp2KGzjnk4fl2vCpYVUVJ+y9pF4W2G1G06nxxddaPk/2mg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.11.0.tgz", + "integrity": "sha512-qllkan3FzntF922QtRNSOFUJF8MVwGyKBpUgy9RoLL6iPilbLAwxZse09XU/c2la0NRBwmt4uqDKrZt0uPjxoQ==", "cpu": [ "ia32" ], @@ -2806,9 +2806,9 @@ } }, "node_modules/@nomicfoundation/slang-win32-x64-msvc": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.10.1.tgz", - "integrity": "sha512-1a6ip/OkkJ8rMaMupgmbon0Rc2rgZ4e+rC7rDA3E2VbDjZsCd2bHAOop9bQCO2rUA9pIYkzwueWJkJZGTKs82w==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.11.0.tgz", + "integrity": "sha512-O7X0JaG8D0PtrQor/Li3cdWAWZbaPdiYcd0pvG1LaiMMx9Uxj8v4uv/3GUWZYF6lvshUBf8HenufJCzSwgWqog==", "cpu": [ "x64" ], @@ -12033,7 +12033,7 @@ "version": "0.7.2", "license": "MIT", "dependencies": { - "@nomicfoundation/slang": "^0.10.1", + "@nomicfoundation/slang": "^0.11.0", "@nomicfoundation/solidity-analyzer": "0.1.1" }, "bin": { @@ -14810,73 +14810,73 @@ } }, "@nomicfoundation/slang": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.10.1.tgz", - "integrity": "sha512-qU9eHCExF6Hix4KPXHv1oQN1vWYGeOrHJXZ+uxroCMZ4Tf5P/kSrxVI2SqnVmwpSdxrwJdDQ9cI8Fe6PV7YDCA==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.11.0.tgz", + "integrity": "sha512-HHPKEmvF7IHbY/70NqC5Hq8eGA9o7QvhpSKhokgbtYyHsxYG4ELqBZnwjIZj3R0KLE9zVC/lyEulGHU3FSFKhg==", "requires": { - "@nomicfoundation/slang-darwin-arm64": "0.10.1", - "@nomicfoundation/slang-darwin-x64": "0.10.1", - "@nomicfoundation/slang-linux-arm64-gnu": "0.10.1", - "@nomicfoundation/slang-linux-arm64-musl": "0.10.1", - "@nomicfoundation/slang-linux-x64-gnu": "0.10.1", - "@nomicfoundation/slang-linux-x64-musl": "0.10.1", - "@nomicfoundation/slang-win32-arm64-msvc": "0.10.1", - "@nomicfoundation/slang-win32-ia32-msvc": "0.10.1", - "@nomicfoundation/slang-win32-x64-msvc": "0.10.1" + "@nomicfoundation/slang-darwin-arm64": "0.11.0", + "@nomicfoundation/slang-darwin-x64": "0.11.0", + "@nomicfoundation/slang-linux-arm64-gnu": "0.11.0", + "@nomicfoundation/slang-linux-arm64-musl": "0.11.0", + "@nomicfoundation/slang-linux-x64-gnu": "0.11.0", + "@nomicfoundation/slang-linux-x64-musl": "0.11.0", + "@nomicfoundation/slang-win32-arm64-msvc": "0.11.0", + "@nomicfoundation/slang-win32-ia32-msvc": "0.11.0", + "@nomicfoundation/slang-win32-x64-msvc": "0.11.0" } }, "@nomicfoundation/slang-darwin-arm64": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.10.1.tgz", - "integrity": "sha512-lvXEs9qQS5Qm0vUhy5NwTlvkTMH7cbm2//Z80jhaBqIJlQFUW/0A4JqK/9RAji8ZuOtGC2QT9LnOk2VoNQGiwg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.11.0.tgz", + "integrity": "sha512-L8cYLkt7iLYDESmff7vYrlkEe8hwjpLr4ovB2HmhJW/uniYy3l+MeoOmeTeNbe4a1ZNLrVCDnEm7Mc6Ee75yyw==", "optional": true }, "@nomicfoundation/slang-darwin-x64": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.10.1.tgz", - "integrity": "sha512-YV8OZyA++MZebNc5j62bXvQKKT8x6jg5kR2O332HHLZb/5kYWJ0PQYw61W9/DwnFFhBwVT65AZ+cJdM0LQJxog==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.11.0.tgz", + "integrity": "sha512-OPuc1z4HzaEvOWLClcGbWJUNEbsB1Yaje+HqPpvE82F76LUr+HeJJu9wzd8Y97R3A10r803V665T0+RFlOjw2A==", "optional": true }, "@nomicfoundation/slang-linux-arm64-gnu": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.10.1.tgz", - "integrity": "sha512-6vJmGMa6yvrf5PvO9lxnd5mfFtrP+1eTVhNBjbAazaSFKfpDrjR4b29JyLwREcialj/+L3prvEUjXRchIj1Gqg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.11.0.tgz", + "integrity": "sha512-vBoBYljYwzkupMMer6FNqe4aXXNJjoItWkY5fop2pz/PzLHj5hr81u8PkdRMUIk/LMvtiyo8XNYb0apsR9UBGA==", "optional": true }, "@nomicfoundation/slang-linux-arm64-musl": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.10.1.tgz", - "integrity": "sha512-cPX5ybj6A46mb9pros8Kwpzv/Lpkp2q+gS+s8Zg62NkogvSqswDZDlBAZ7FUZTzGpMfhZJn75itPgGUCAoImUA==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.11.0.tgz", + "integrity": "sha512-leHGCunMy75SINbd/utBZx+H7jkBFHAQb8Qvh8xYB2mXKRhUxefbMQFM34xFbGJEI6IDOBJu06v81lzHv44lPA==", "optional": true }, "@nomicfoundation/slang-linux-x64-gnu": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.10.1.tgz", - "integrity": "sha512-sZvtSgb5LencgjqfLkFlhrYQgM8QoSy2t0IcCG1JLA8MXWlYRN/F3nDm3zKSmuOwmtFIzvbc7X/wkkGCNsSQ9g==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.11.0.tgz", + "integrity": "sha512-YGP+eIhbGpJXQql2QmTXIRCSAqYtbYhIu79zM2pofVzFovIZ1ypjbrsn/jvhZhYoYZfEPYBGvPMO682/jNBxvQ==", "optional": true }, "@nomicfoundation/slang-linux-x64-musl": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.10.1.tgz", - "integrity": "sha512-S2WnY4tMCWBPaAQcPoRDZ6M01hKgE1R22n7sqnF7KI2o0Khsm9fnlAZ/2ct4ioe2Je4hyHrNhms8/534P8dQuw==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.11.0.tgz", + "integrity": "sha512-dUHKwLCIqqmiRmqNYbKoCmTzAn13pCMFCcIfqLKiO/ZCMSZgOzxHqaB95u7FwdhWjebjoqlUTyBVGDv3xrSX7A==", "optional": true }, "@nomicfoundation/slang-win32-arm64-msvc": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.10.1.tgz", - "integrity": "sha512-diu8P/UdSdn1p+XKQK5NgZV2RTZWsL2kHLO+n0bZ3Z4lTojL8drDhMXIXzMcwRUuJdXv/NkO97dsBwM+CyhGiw==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.11.0.tgz", + "integrity": "sha512-w9vb0B3gY39KcqchWzy3uYmDkgDiyqqoWjY+tmkZLj2lFnGFzFY0I/sKUt8QlBpf0v8s+8+a7236SL33JIItrA==", "optional": true }, "@nomicfoundation/slang-win32-ia32-msvc": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.10.1.tgz", - "integrity": "sha512-oRNDHADhWFq6D2l8UacJ+ExxJO7sYKOMn4IlYGulyp2KGzjnk4fl2vCpYVUVJ+y9pF4W2G1G06nxxddaPk/2mg==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.11.0.tgz", + "integrity": "sha512-qllkan3FzntF922QtRNSOFUJF8MVwGyKBpUgy9RoLL6iPilbLAwxZse09XU/c2la0NRBwmt4uqDKrZt0uPjxoQ==", "optional": true }, "@nomicfoundation/slang-win32-x64-msvc": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.10.1.tgz", - "integrity": "sha512-1a6ip/OkkJ8rMaMupgmbon0Rc2rgZ4e+rC7rDA3E2VbDjZsCd2bHAOop9bQCO2rUA9pIYkzwueWJkJZGTKs82w==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.11.0.tgz", + "integrity": "sha512-O7X0JaG8D0PtrQor/Li3cdWAWZbaPdiYcd0pvG1LaiMMx9Uxj8v4uv/3GUWZYF6lvshUBf8HenufJCzSwgWqog==", "optional": true }, "@nomicfoundation/solidity-analyzer": { @@ -14958,7 +14958,7 @@ "version": "file:server", "requires": { "@istanbuljs/nyc-config-typescript": "1.0.2", - "@nomicfoundation/slang": "^0.10.1", + "@nomicfoundation/slang": "^0.11.0", "@nomicfoundation/solidity-analyzer": "0.1.1", "@sentry/node": "7.32.1", "@sentry/tracing": "7.32.1", diff --git a/server/package.json b/server/package.json index 905c1467..0acbcb31 100644 --- a/server/package.json +++ b/server/package.json @@ -87,7 +87,7 @@ "yaml": "^2.2.1" }, "dependencies": { - "@nomicfoundation/slang": "^0.10.1", + "@nomicfoundation/slang": "^0.11.0", "@nomicfoundation/solidity-analyzer": "0.1.1" } } diff --git a/server/src/parser/slangHelpers.ts b/server/src/parser/slangHelpers.ts index 00da758d..722b4957 100644 --- a/server/src/parser/slangHelpers.ts +++ b/server/src/parser/slangHelpers.ts @@ -16,7 +16,7 @@ export interface SlangNodeWrapper { type: NodeType; kind: NodeKind; text: string; - pathRuleNodes: SlangNode[]; + pathRuleNodes: () => SlangNode[]; } export function slangToVSCodeRange( diff --git a/server/src/services/documentSymbol/SymbolVisitor.ts b/server/src/services/documentSymbol/SymbolVisitor.ts index 2b8d1dff..2464a0d2 100644 --- a/server/src/services/documentSymbol/SymbolVisitor.ts +++ b/server/src/services/documentSymbol/SymbolVisitor.ts @@ -32,7 +32,8 @@ export abstract class SymbolVisitor { this.nameTokenKind, ]); - if (nameToken && childCursor.pathRuleNodes.length === 1) { + const depth = childCursor.pathRuleNodes().length; + if (nameToken && depth === 1) { symbolName = nameToken.text; selectionRange = slangToVSCodeRange( this.document, diff --git a/server/src/services/documentSymbol/onDocumentSymbol.ts b/server/src/services/documentSymbol/onDocumentSymbol.ts index 48b77321..6d943595 100644 --- a/server/src/services/documentSymbol/onDocumentSymbol.ts +++ b/server/src/services/documentSymbol/onDocumentSymbol.ts @@ -6,7 +6,6 @@ import { DocumentSymbol, SymbolInformation } from "vscode-languageserver-types"; import { analyze } from "@nomicfoundation/solidity-analyzer"; import _ from "lodash"; import { ProductionKind } from "@nomicfoundation/slang/kinds"; -import { Cursor } from "@nomicfoundation/slang/cursor"; import { RuleNode } from "@nomicfoundation/slang/cst"; import { ServerState } from "../../types"; import { getLanguage } from "../../parser/slangHelpers"; @@ -65,7 +64,6 @@ export function onDocumentSymbol(serverState: ServerState) { document.getText() ); - const parseTree = parseOutput.parseTree; span.finish(); const builder = new SymbolTreeBuilder(); @@ -94,9 +92,9 @@ export function onDocumentSymbol(serverState: ServerState) { const indexedVisitors = _.keyBy(visitors, "ruleKind"); - const cursor: Cursor = parseTree.cursor; + const cursor = parseOutput.createTreeCursor(); const ruleKinds = visitors.map((v) => v.ruleKind); - let node: RuleNode; + let node: RuleNode | null = null; // Useful to keep this here for development // const kursor: Cursor = parseTree.cursor.clone(); diff --git a/server/src/services/semanticHighlight/highlighters/ContractDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/ContractDefinitionHighlighter.ts index a0449c91..f99e2838 100644 --- a/server/src/services/semanticHighlight/highlighters/ContractDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/ContractDefinitionHighlighter.ts @@ -9,7 +9,7 @@ export class ContractDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes; + const ancestors = nodeWrapper.pathRuleNodes(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/CustomTypeHighlighter.ts b/server/src/services/semanticHighlight/highlighters/CustomTypeHighlighter.ts index 7336ec19..e084cf6e 100644 --- a/server/src/services/semanticHighlight/highlighters/CustomTypeHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/CustomTypeHighlighter.ts @@ -9,7 +9,7 @@ export class CustomTypeHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes; + const ancestors = nodeWrapper.pathRuleNodes(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/EnumDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/EnumDefinitionHighlighter.ts index ff239114..7d0cddc2 100644 --- a/server/src/services/semanticHighlight/highlighters/EnumDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/EnumDefinitionHighlighter.ts @@ -8,7 +8,7 @@ export class EnumDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes; + const ancestors = nodeWrapper.pathRuleNodes(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/ErrorDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/ErrorDefinitionHighlighter.ts index 76b46d8c..5220f7a9 100644 --- a/server/src/services/semanticHighlight/highlighters/ErrorDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/ErrorDefinitionHighlighter.ts @@ -8,7 +8,7 @@ export class ErrorDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes; + const ancestors = nodeWrapper.pathRuleNodes(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/EventDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/EventDefinitionHighlighter.ts index beeda201..bfa1e140 100644 --- a/server/src/services/semanticHighlight/highlighters/EventDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/EventDefinitionHighlighter.ts @@ -9,7 +9,7 @@ export class EventDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes; + const ancestors = nodeWrapper.pathRuleNodes(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/EventEmissionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/EventEmissionHighlighter.ts index 96bc1611..420c46e2 100644 --- a/server/src/services/semanticHighlight/highlighters/EventEmissionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/EventEmissionHighlighter.ts @@ -9,7 +9,7 @@ export class EventEmissionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes; + const ancestors = nodeWrapper.pathRuleNodes(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/FunctionCallHighlighter.ts b/server/src/services/semanticHighlight/highlighters/FunctionCallHighlighter.ts index 52b8b7f9..75889ef3 100644 --- a/server/src/services/semanticHighlight/highlighters/FunctionCallHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/FunctionCallHighlighter.ts @@ -9,7 +9,7 @@ export class FunctionCallHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes; + const ancestors = nodeWrapper.pathRuleNodes(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/FunctionDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/FunctionDefinitionHighlighter.ts index bce240a5..b602dd1c 100644 --- a/server/src/services/semanticHighlight/highlighters/FunctionDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/FunctionDefinitionHighlighter.ts @@ -9,7 +9,7 @@ export class FunctionDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes; + const ancestors = nodeWrapper.pathRuleNodes(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/InterfaceDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/InterfaceDefinitionHighlighter.ts index 3c2e12d8..1462ebcc 100644 --- a/server/src/services/semanticHighlight/highlighters/InterfaceDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/InterfaceDefinitionHighlighter.ts @@ -9,7 +9,7 @@ export class InterfaceDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes; + const ancestors = nodeWrapper.pathRuleNodes(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/LibraryDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/LibraryDefinitionHighlighter.ts index 5cc2ec6c..119c277b 100644 --- a/server/src/services/semanticHighlight/highlighters/LibraryDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/LibraryDefinitionHighlighter.ts @@ -8,7 +8,7 @@ export class LibraryDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes; + const ancestors = nodeWrapper.pathRuleNodes(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/StructDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/StructDefinitionHighlighter.ts index 1a31047a..e5e73ba1 100644 --- a/server/src/services/semanticHighlight/highlighters/StructDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/StructDefinitionHighlighter.ts @@ -9,7 +9,7 @@ export class StructDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes; + const ancestors = nodeWrapper.pathRuleNodes(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter copy.ts b/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter copy.ts index 96a6f7bf..d60619f9 100644 --- a/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter copy.ts +++ b/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter copy.ts @@ -8,7 +8,7 @@ export class UserDefinedValueTypeDefinitionHighlighter extends HighlightVisitor public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes; + const ancestors = nodeWrapper.pathRuleNodes(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/onSemanticTokensFull.ts b/server/src/services/semanticHighlight/onSemanticTokensFull.ts index f997bf2e..97ef7d18 100644 --- a/server/src/services/semanticHighlight/onSemanticTokensFull.ts +++ b/server/src/services/semanticHighlight/onSemanticTokensFull.ts @@ -8,7 +8,6 @@ import { import _, { Dictionary } from "lodash"; import { analyze } from "@nomicfoundation/solidity-analyzer"; import { ProductionKind, TokenKind } from "@nomicfoundation/slang/kinds"; -import { Cursor } from "@nomicfoundation/slang/cursor"; import { TokenNode } from "@nomicfoundation/slang/cst"; import { ServerState } from "../../types"; import { getLanguage } from "../../parser/slangHelpers"; @@ -66,7 +65,6 @@ export function onSemanticTokensFull(serverState: ServerState) { document.getText() ); - const parseTree = parseOutput.parseTree; span.finish(); // Register visitors @@ -102,8 +100,8 @@ export function onSemanticTokensFull(serverState: ServerState) { } } - const cursor: Cursor = parseTree.cursor; - let node: TokenNode; + const cursor = parseOutput.createTreeCursor(); + let node: TokenNode | null = null; span = transaction.startChild({ op: "walk-highlight-tokens" }); while ( @@ -111,7 +109,7 @@ export function onSemanticTokensFull(serverState: ServerState) { ) { const nodeWrapper = { kind: node.kind, - pathRuleNodes: cursor.pathRuleNodes, + pathRuleNodes: () => cursor.pathRuleNodes(), text: node.text, textRange: cursor.textRange, type: node.type, From e5ad8c64ba447615f6196c1ae8fe6d775b970740 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Wed, 21 Feb 2024 17:10:31 +0100 Subject: [PATCH 02/14] chore: Upgrade to slang 0.12.0 The ranges for variable statement changed because the CST shape changed, which affects the ranges in the test snapshots. --- client/scripts/bundle.js | 20 +-- package-lock.json | 160 +++++++++--------- server/package.json | 2 +- server/src/parser/slangHelpers.ts | 2 +- .../services/documentSymbol/SymbolVisitor.ts | 16 +- .../documentSymbol/onDocumentSymbol.ts | 11 +- .../visitors/VariableDeclaration.ts | 2 +- .../ContractDefinitionHighlighter.ts | 2 +- .../highlighters/CustomTypeHighlighter.ts | 2 +- .../highlighters/EnumDefinitionHighlighter.ts | 2 +- .../ErrorDefinitionHighlighter.ts | 2 +- .../EventDefinitionHighlighter.ts | 2 +- .../highlighters/EventEmissionHighlighter.ts | 2 +- .../highlighters/FunctionCallHighlighter.ts | 2 +- .../FunctionDefinitionHighlighter.ts | 4 +- .../InterfaceDefinitionHighlighter.ts | 2 +- .../LibraryDefinitionHighlighter.ts | 2 +- .../StructDefinitionHighlighter.ts | 2 +- ...inedValueTypeDefinitionHighlighter copy.ts | 2 +- .../semanticHighlight/onSemanticTokensFull.ts | 15 +- .../documentSymbol/documentSymbol.test.ts | 20 +-- 21 files changed, 136 insertions(+), 138 deletions(-) diff --git a/client/scripts/bundle.js b/client/scripts/bundle.js index 699aee9a..8d74e2d4 100755 --- a/client/scripts/bundle.js +++ b/client/scripts/bundle.js @@ -200,16 +200,16 @@ async function main() { "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", - "@nomicfoundation/slang": "0.11.0", - "@nomicfoundation/slang-darwin-arm64": "0.11.0", - "@nomicfoundation/slang-win32-arm64-msvc": "0.11.0", - "@nomicfoundation/slang-linux-arm64-gnu": "0.11.0", - "@nomicfoundation/slang-linux-arm64-musl": "0.11.0", - "@nomicfoundation/slang-win32-ia32-msvc": "0.11.0", - "@nomicfoundation/slang-darwin-x64": "0.11.0", - "@nomicfoundation/slang-win32-x64-msvc": "0.11.0", - "@nomicfoundation/slang-linux-x64-gnu": "0.11.0", - "@nomicfoundation/slang-linux-x64-musl": "0.11.0", + "@nomicfoundation/slang": "0.12.0", + "@nomicfoundation/slang-darwin-arm64": "0.12.0", + "@nomicfoundation/slang-win32-arm64-msvc": "0.12.0", + "@nomicfoundation/slang-linux-arm64-gnu": "0.12.0", + "@nomicfoundation/slang-linux-arm64-musl": "0.12.0", + "@nomicfoundation/slang-win32-ia32-msvc": "0.12.0", + "@nomicfoundation/slang-darwin-x64": "0.12.0", + "@nomicfoundation/slang-win32-x64-msvc": "0.12.0", + "@nomicfoundation/slang-linux-x64-gnu": "0.12.0", + "@nomicfoundation/slang-linux-x64-musl": "0.12.0", }, }) ); diff --git a/package-lock.json b/package-lock.json index 361714ed..127f941e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2667,28 +2667,28 @@ } }, "node_modules/@nomicfoundation/slang": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.11.0.tgz", - "integrity": "sha512-HHPKEmvF7IHbY/70NqC5Hq8eGA9o7QvhpSKhokgbtYyHsxYG4ELqBZnwjIZj3R0KLE9zVC/lyEulGHU3FSFKhg==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.12.0.tgz", + "integrity": "sha512-rphWJzPj+b7Q6GCJQxJrIKqGsT+vmofMUGJuYBES4G0COdYn+EKKDPJcGhbwWvJK0jrcNX6V+Ki5/nhlTTl9rQ==", "engines": { "node": ">= 10" }, "optionalDependencies": { - "@nomicfoundation/slang-darwin-arm64": "0.11.0", - "@nomicfoundation/slang-darwin-x64": "0.11.0", - "@nomicfoundation/slang-linux-arm64-gnu": "0.11.0", - "@nomicfoundation/slang-linux-arm64-musl": "0.11.0", - "@nomicfoundation/slang-linux-x64-gnu": "0.11.0", - "@nomicfoundation/slang-linux-x64-musl": "0.11.0", - "@nomicfoundation/slang-win32-arm64-msvc": "0.11.0", - "@nomicfoundation/slang-win32-ia32-msvc": "0.11.0", - "@nomicfoundation/slang-win32-x64-msvc": "0.11.0" + "@nomicfoundation/slang-darwin-arm64": "0.12.0", + "@nomicfoundation/slang-darwin-x64": "0.12.0", + "@nomicfoundation/slang-linux-arm64-gnu": "0.12.0", + "@nomicfoundation/slang-linux-arm64-musl": "0.12.0", + "@nomicfoundation/slang-linux-x64-gnu": "0.12.0", + "@nomicfoundation/slang-linux-x64-musl": "0.12.0", + "@nomicfoundation/slang-win32-arm64-msvc": "0.12.0", + "@nomicfoundation/slang-win32-ia32-msvc": "0.12.0", + "@nomicfoundation/slang-win32-x64-msvc": "0.12.0" } }, "node_modules/@nomicfoundation/slang-darwin-arm64": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.11.0.tgz", - "integrity": "sha512-L8cYLkt7iLYDESmff7vYrlkEe8hwjpLr4ovB2HmhJW/uniYy3l+MeoOmeTeNbe4a1ZNLrVCDnEm7Mc6Ee75yyw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.12.0.tgz", + "integrity": "sha512-FCZA8rghL8rICf3xZFD74ZhEx7xLJw2SanNVCx+tiYJXfCcoKTpAMlj3bRSlDNri7weEo+/UUDRKKMK695Allw==", "cpu": [ "arm64" ], @@ -2701,9 +2701,9 @@ } }, "node_modules/@nomicfoundation/slang-darwin-x64": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.11.0.tgz", - "integrity": "sha512-OPuc1z4HzaEvOWLClcGbWJUNEbsB1Yaje+HqPpvE82F76LUr+HeJJu9wzd8Y97R3A10r803V665T0+RFlOjw2A==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.12.0.tgz", + "integrity": "sha512-hgOIcn6ZjRdBwPq2ZQHc2EOUyOWGlFxL1wlUPkoMr3gJFmzHpetqJ9pwkEKTUKhrnBc8FAtQYwbniyHcXin32g==", "cpu": [ "x64" ], @@ -2716,9 +2716,9 @@ } }, "node_modules/@nomicfoundation/slang-linux-arm64-gnu": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.11.0.tgz", - "integrity": "sha512-vBoBYljYwzkupMMer6FNqe4aXXNJjoItWkY5fop2pz/PzLHj5hr81u8PkdRMUIk/LMvtiyo8XNYb0apsR9UBGA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.12.0.tgz", + "integrity": "sha512-/nlMW7Qgtffc32NR+Bcil52GMAqoALyBUF/U70mINlOmHghfv7Z6znt17bZ4h2IR//xK9PYcpjoMafY044sj2A==", "cpu": [ "arm64" ], @@ -2731,9 +2731,9 @@ } }, "node_modules/@nomicfoundation/slang-linux-arm64-musl": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.11.0.tgz", - "integrity": "sha512-leHGCunMy75SINbd/utBZx+H7jkBFHAQb8Qvh8xYB2mXKRhUxefbMQFM34xFbGJEI6IDOBJu06v81lzHv44lPA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.12.0.tgz", + "integrity": "sha512-n75FdDrVH4X7ZPUYa3C2oiqnGyWBjpLbKHtvgi951gDV4osCsLtzSAZbm40o0t8837AGU+gb2mksBRJbx+Gusg==", "cpu": [ "arm64" ], @@ -2746,9 +2746,9 @@ } }, "node_modules/@nomicfoundation/slang-linux-x64-gnu": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.11.0.tgz", - "integrity": "sha512-YGP+eIhbGpJXQql2QmTXIRCSAqYtbYhIu79zM2pofVzFovIZ1ypjbrsn/jvhZhYoYZfEPYBGvPMO682/jNBxvQ==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.12.0.tgz", + "integrity": "sha512-nQcrHdiEQOqBpa8Uj3X8WKdhbPigFzB4logIXUqu2si0s0JPAn4PETw23H/+ul/PXkQE+lGQQCdrwSChDquYkQ==", "cpu": [ "x64" ], @@ -2761,9 +2761,9 @@ } }, "node_modules/@nomicfoundation/slang-linux-x64-musl": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.11.0.tgz", - "integrity": "sha512-dUHKwLCIqqmiRmqNYbKoCmTzAn13pCMFCcIfqLKiO/ZCMSZgOzxHqaB95u7FwdhWjebjoqlUTyBVGDv3xrSX7A==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.12.0.tgz", + "integrity": "sha512-L0yKk25RxpwKH0vZ3qPsUgHnjpjcGYUedG4PPrk3PU5TgPvFjyMXuvwvjZcLMGFWJelQV37QipXbfRSyALLmSQ==", "cpu": [ "x64" ], @@ -2776,9 +2776,9 @@ } }, "node_modules/@nomicfoundation/slang-win32-arm64-msvc": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.11.0.tgz", - "integrity": "sha512-w9vb0B3gY39KcqchWzy3uYmDkgDiyqqoWjY+tmkZLj2lFnGFzFY0I/sKUt8QlBpf0v8s+8+a7236SL33JIItrA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.12.0.tgz", + "integrity": "sha512-Zecx/ZmZ3uffDNyuqeCdeDvnEZXMcVLLbsjf3RT+C8x2j3Li4YJpdf3fszGvdhaq+S7tIeCS2JP+KbgtOadXjQ==", "cpu": [ "arm64" ], @@ -2791,9 +2791,9 @@ } }, "node_modules/@nomicfoundation/slang-win32-ia32-msvc": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.11.0.tgz", - "integrity": "sha512-qllkan3FzntF922QtRNSOFUJF8MVwGyKBpUgy9RoLL6iPilbLAwxZse09XU/c2la0NRBwmt4uqDKrZt0uPjxoQ==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.12.0.tgz", + "integrity": "sha512-w8Y2WENBlB9XzeaiBiE3VbxLPpXHm9/dZvKXq7o/3yfvRedKjbHHJoEH0ubfXFHXDfADh+7Va/B0o8ja/sHkNQ==", "cpu": [ "ia32" ], @@ -2806,9 +2806,9 @@ } }, "node_modules/@nomicfoundation/slang-win32-x64-msvc": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.11.0.tgz", - "integrity": "sha512-O7X0JaG8D0PtrQor/Li3cdWAWZbaPdiYcd0pvG1LaiMMx9Uxj8v4uv/3GUWZYF6lvshUBf8HenufJCzSwgWqog==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.12.0.tgz", + "integrity": "sha512-YnPv5ZYcUD1HVa3WEFcjd+xnlsNKBtfzMRLHRTOF344ZoJvmQ5HsNKD/nmPtaRA7SwAVvm7bwZ7JCzO/6bUIzw==", "cpu": [ "x64" ], @@ -12033,7 +12033,7 @@ "version": "0.7.2", "license": "MIT", "dependencies": { - "@nomicfoundation/slang": "^0.11.0", + "@nomicfoundation/slang": "^0.12.0", "@nomicfoundation/solidity-analyzer": "0.1.1" }, "bin": { @@ -14810,73 +14810,73 @@ } }, "@nomicfoundation/slang": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.11.0.tgz", - "integrity": "sha512-HHPKEmvF7IHbY/70NqC5Hq8eGA9o7QvhpSKhokgbtYyHsxYG4ELqBZnwjIZj3R0KLE9zVC/lyEulGHU3FSFKhg==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.12.0.tgz", + "integrity": "sha512-rphWJzPj+b7Q6GCJQxJrIKqGsT+vmofMUGJuYBES4G0COdYn+EKKDPJcGhbwWvJK0jrcNX6V+Ki5/nhlTTl9rQ==", "requires": { - "@nomicfoundation/slang-darwin-arm64": "0.11.0", - "@nomicfoundation/slang-darwin-x64": "0.11.0", - "@nomicfoundation/slang-linux-arm64-gnu": "0.11.0", - "@nomicfoundation/slang-linux-arm64-musl": "0.11.0", - "@nomicfoundation/slang-linux-x64-gnu": "0.11.0", - "@nomicfoundation/slang-linux-x64-musl": "0.11.0", - "@nomicfoundation/slang-win32-arm64-msvc": "0.11.0", - "@nomicfoundation/slang-win32-ia32-msvc": "0.11.0", - "@nomicfoundation/slang-win32-x64-msvc": "0.11.0" + "@nomicfoundation/slang-darwin-arm64": "0.12.0", + "@nomicfoundation/slang-darwin-x64": "0.12.0", + "@nomicfoundation/slang-linux-arm64-gnu": "0.12.0", + "@nomicfoundation/slang-linux-arm64-musl": "0.12.0", + "@nomicfoundation/slang-linux-x64-gnu": "0.12.0", + "@nomicfoundation/slang-linux-x64-musl": "0.12.0", + "@nomicfoundation/slang-win32-arm64-msvc": "0.12.0", + "@nomicfoundation/slang-win32-ia32-msvc": "0.12.0", + "@nomicfoundation/slang-win32-x64-msvc": "0.12.0" } }, "@nomicfoundation/slang-darwin-arm64": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.11.0.tgz", - "integrity": "sha512-L8cYLkt7iLYDESmff7vYrlkEe8hwjpLr4ovB2HmhJW/uniYy3l+MeoOmeTeNbe4a1ZNLrVCDnEm7Mc6Ee75yyw==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.12.0.tgz", + "integrity": "sha512-FCZA8rghL8rICf3xZFD74ZhEx7xLJw2SanNVCx+tiYJXfCcoKTpAMlj3bRSlDNri7weEo+/UUDRKKMK695Allw==", "optional": true }, "@nomicfoundation/slang-darwin-x64": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.11.0.tgz", - "integrity": "sha512-OPuc1z4HzaEvOWLClcGbWJUNEbsB1Yaje+HqPpvE82F76LUr+HeJJu9wzd8Y97R3A10r803V665T0+RFlOjw2A==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.12.0.tgz", + "integrity": "sha512-hgOIcn6ZjRdBwPq2ZQHc2EOUyOWGlFxL1wlUPkoMr3gJFmzHpetqJ9pwkEKTUKhrnBc8FAtQYwbniyHcXin32g==", "optional": true }, "@nomicfoundation/slang-linux-arm64-gnu": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.11.0.tgz", - "integrity": "sha512-vBoBYljYwzkupMMer6FNqe4aXXNJjoItWkY5fop2pz/PzLHj5hr81u8PkdRMUIk/LMvtiyo8XNYb0apsR9UBGA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.12.0.tgz", + "integrity": "sha512-/nlMW7Qgtffc32NR+Bcil52GMAqoALyBUF/U70mINlOmHghfv7Z6znt17bZ4h2IR//xK9PYcpjoMafY044sj2A==", "optional": true }, "@nomicfoundation/slang-linux-arm64-musl": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.11.0.tgz", - "integrity": "sha512-leHGCunMy75SINbd/utBZx+H7jkBFHAQb8Qvh8xYB2mXKRhUxefbMQFM34xFbGJEI6IDOBJu06v81lzHv44lPA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.12.0.tgz", + "integrity": "sha512-n75FdDrVH4X7ZPUYa3C2oiqnGyWBjpLbKHtvgi951gDV4osCsLtzSAZbm40o0t8837AGU+gb2mksBRJbx+Gusg==", "optional": true }, "@nomicfoundation/slang-linux-x64-gnu": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.11.0.tgz", - "integrity": "sha512-YGP+eIhbGpJXQql2QmTXIRCSAqYtbYhIu79zM2pofVzFovIZ1ypjbrsn/jvhZhYoYZfEPYBGvPMO682/jNBxvQ==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.12.0.tgz", + "integrity": "sha512-nQcrHdiEQOqBpa8Uj3X8WKdhbPigFzB4logIXUqu2si0s0JPAn4PETw23H/+ul/PXkQE+lGQQCdrwSChDquYkQ==", "optional": true }, "@nomicfoundation/slang-linux-x64-musl": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.11.0.tgz", - "integrity": "sha512-dUHKwLCIqqmiRmqNYbKoCmTzAn13pCMFCcIfqLKiO/ZCMSZgOzxHqaB95u7FwdhWjebjoqlUTyBVGDv3xrSX7A==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.12.0.tgz", + "integrity": "sha512-L0yKk25RxpwKH0vZ3qPsUgHnjpjcGYUedG4PPrk3PU5TgPvFjyMXuvwvjZcLMGFWJelQV37QipXbfRSyALLmSQ==", "optional": true }, "@nomicfoundation/slang-win32-arm64-msvc": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.11.0.tgz", - "integrity": "sha512-w9vb0B3gY39KcqchWzy3uYmDkgDiyqqoWjY+tmkZLj2lFnGFzFY0I/sKUt8QlBpf0v8s+8+a7236SL33JIItrA==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.12.0.tgz", + "integrity": "sha512-Zecx/ZmZ3uffDNyuqeCdeDvnEZXMcVLLbsjf3RT+C8x2j3Li4YJpdf3fszGvdhaq+S7tIeCS2JP+KbgtOadXjQ==", "optional": true }, "@nomicfoundation/slang-win32-ia32-msvc": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.11.0.tgz", - "integrity": "sha512-qllkan3FzntF922QtRNSOFUJF8MVwGyKBpUgy9RoLL6iPilbLAwxZse09XU/c2la0NRBwmt4uqDKrZt0uPjxoQ==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.12.0.tgz", + "integrity": "sha512-w8Y2WENBlB9XzeaiBiE3VbxLPpXHm9/dZvKXq7o/3yfvRedKjbHHJoEH0ubfXFHXDfADh+7Va/B0o8ja/sHkNQ==", "optional": true }, "@nomicfoundation/slang-win32-x64-msvc": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.11.0.tgz", - "integrity": "sha512-O7X0JaG8D0PtrQor/Li3cdWAWZbaPdiYcd0pvG1LaiMMx9Uxj8v4uv/3GUWZYF6lvshUBf8HenufJCzSwgWqog==", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.12.0.tgz", + "integrity": "sha512-YnPv5ZYcUD1HVa3WEFcjd+xnlsNKBtfzMRLHRTOF344ZoJvmQ5HsNKD/nmPtaRA7SwAVvm7bwZ7JCzO/6bUIzw==", "optional": true }, "@nomicfoundation/solidity-analyzer": { @@ -14958,7 +14958,7 @@ "version": "file:server", "requires": { "@istanbuljs/nyc-config-typescript": "1.0.2", - "@nomicfoundation/slang": "^0.11.0", + "@nomicfoundation/slang": "^0.12.0", "@nomicfoundation/solidity-analyzer": "0.1.1", "@sentry/node": "7.32.1", "@sentry/tracing": "7.32.1", diff --git a/server/package.json b/server/package.json index 0acbcb31..7939fe66 100644 --- a/server/package.json +++ b/server/package.json @@ -87,7 +87,7 @@ "yaml": "^2.2.1" }, "dependencies": { - "@nomicfoundation/slang": "^0.11.0", + "@nomicfoundation/slang": "^0.12.0", "@nomicfoundation/solidity-analyzer": "0.1.1" } } diff --git a/server/src/parser/slangHelpers.ts b/server/src/parser/slangHelpers.ts index 722b4957..0d605171 100644 --- a/server/src/parser/slangHelpers.ts +++ b/server/src/parser/slangHelpers.ts @@ -16,7 +16,7 @@ export interface SlangNodeWrapper { type: NodeType; kind: NodeKind; text: string; - pathRuleNodes: () => SlangNode[]; + ancestors: () => SlangNode[]; } export function slangToVSCodeRange( diff --git a/server/src/services/documentSymbol/SymbolVisitor.ts b/server/src/services/documentSymbol/SymbolVisitor.ts index 2464a0d2..4e85bb7a 100644 --- a/server/src/services/documentSymbol/SymbolVisitor.ts +++ b/server/src/services/documentSymbol/SymbolVisitor.ts @@ -27,13 +27,15 @@ export abstract class SymbolVisitor { // Find identifier const childCursor = cursor.spawn(); - do { - const nameToken: TokenNode | null = childCursor.findTokenWithKind([ - this.nameTokenKind, - ]); + while (childCursor.goToNextTokenWithKinds([this.nameTokenKind])) { + const nameToken = childCursor.node() as TokenNode; - const depth = childCursor.pathRuleNodes().length; - if (nameToken && depth === 1) { + // TODO: Handle FunctionDefinition > FunctionName > Identifier (depth = 2) + const isFunctionName = + childCursor.depth === 2 && + childCursor.ancestors()[childCursor.ancestors().length - 1]?.kind === + RuleKind.FunctionName; + if (childCursor.depth === 1 || isFunctionName) { symbolName = nameToken.text; selectionRange = slangToVSCodeRange( this.document, @@ -41,7 +43,7 @@ export abstract class SymbolVisitor { ); break; } - } while (childCursor.goToNext()); + } let lastOpenSymbol; diff --git a/server/src/services/documentSymbol/onDocumentSymbol.ts b/server/src/services/documentSymbol/onDocumentSymbol.ts index 6d943595..33f74aae 100644 --- a/server/src/services/documentSymbol/onDocumentSymbol.ts +++ b/server/src/services/documentSymbol/onDocumentSymbol.ts @@ -5,7 +5,7 @@ import { DocumentSymbolParams } from "vscode-languageserver/node"; import { DocumentSymbol, SymbolInformation } from "vscode-languageserver-types"; import { analyze } from "@nomicfoundation/solidity-analyzer"; import _ from "lodash"; -import { ProductionKind } from "@nomicfoundation/slang/kinds"; +import { RuleKind } from "@nomicfoundation/slang/kinds"; import { RuleNode } from "@nomicfoundation/slang/cst"; import { ServerState } from "../../types"; import { getLanguage } from "../../parser/slangHelpers"; @@ -60,7 +60,7 @@ export function onDocumentSymbol(serverState: ServerState) { span = transaction.startChild({ op: "slang-parsing" }); const parseOutput = language.parse( - ProductionKind.SourceUnit, + RuleKind.SourceUnit, document.getText() ); @@ -94,7 +94,6 @@ export function onDocumentSymbol(serverState: ServerState) { const cursor = parseOutput.createTreeCursor(); const ruleKinds = visitors.map((v) => v.ruleKind); - let node: RuleNode | null = null; // Useful to keep this here for development // const kursor: Cursor = parseTree.cursor.clone(); @@ -107,11 +106,11 @@ export function onDocumentSymbol(serverState: ServerState) { // } while (kursor.goToNext()); span = transaction.startChild({ op: "walk-generate-symbols" }); - while ((node = cursor.findRuleWithKind(ruleKinds)) !== null) { + while (cursor.goToNextRuleWithKinds(ruleKinds)) { + const node = cursor.node() as RuleNode; + const visitor: SymbolVisitor = indexedVisitors[node.kind]; visitor.onRuleNode(cursor); - - cursor.goToNext(); } span.finish(); diff --git a/server/src/services/documentSymbol/visitors/VariableDeclaration.ts b/server/src/services/documentSymbol/visitors/VariableDeclaration.ts index ad8af4b4..464aefba 100644 --- a/server/src/services/documentSymbol/visitors/VariableDeclaration.ts +++ b/server/src/services/documentSymbol/visitors/VariableDeclaration.ts @@ -3,7 +3,7 @@ import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class VariableDeclaration extends SymbolVisitor { - public ruleKind = RuleKind.VariableDeclaration; + public ruleKind = RuleKind.VariableDeclarationStatement; public symbolKind = SymbolKind.Variable; public nameTokenKind = TokenKind.Identifier; } diff --git a/server/src/services/semanticHighlight/highlighters/ContractDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/ContractDefinitionHighlighter.ts index f99e2838..3ce78bd9 100644 --- a/server/src/services/semanticHighlight/highlighters/ContractDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/ContractDefinitionHighlighter.ts @@ -9,7 +9,7 @@ export class ContractDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes(); + const ancestors = nodeWrapper.ancestors(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/CustomTypeHighlighter.ts b/server/src/services/semanticHighlight/highlighters/CustomTypeHighlighter.ts index e084cf6e..db425e54 100644 --- a/server/src/services/semanticHighlight/highlighters/CustomTypeHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/CustomTypeHighlighter.ts @@ -9,7 +9,7 @@ export class CustomTypeHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes(); + const ancestors = nodeWrapper.ancestors(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/EnumDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/EnumDefinitionHighlighter.ts index 7d0cddc2..64e42fcf 100644 --- a/server/src/services/semanticHighlight/highlighters/EnumDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/EnumDefinitionHighlighter.ts @@ -8,7 +8,7 @@ export class EnumDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes(); + const ancestors = nodeWrapper.ancestors(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/ErrorDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/ErrorDefinitionHighlighter.ts index 5220f7a9..c1827b69 100644 --- a/server/src/services/semanticHighlight/highlighters/ErrorDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/ErrorDefinitionHighlighter.ts @@ -8,7 +8,7 @@ export class ErrorDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes(); + const ancestors = nodeWrapper.ancestors(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/EventDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/EventDefinitionHighlighter.ts index bfa1e140..789e89db 100644 --- a/server/src/services/semanticHighlight/highlighters/EventDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/EventDefinitionHighlighter.ts @@ -9,7 +9,7 @@ export class EventDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes(); + const ancestors = nodeWrapper.ancestors(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/EventEmissionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/EventEmissionHighlighter.ts index 420c46e2..2bffaac0 100644 --- a/server/src/services/semanticHighlight/highlighters/EventEmissionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/EventEmissionHighlighter.ts @@ -9,7 +9,7 @@ export class EventEmissionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes(); + const ancestors = nodeWrapper.ancestors(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/FunctionCallHighlighter.ts b/server/src/services/semanticHighlight/highlighters/FunctionCallHighlighter.ts index 75889ef3..3c24d7cb 100644 --- a/server/src/services/semanticHighlight/highlighters/FunctionCallHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/FunctionCallHighlighter.ts @@ -9,7 +9,7 @@ export class FunctionCallHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes(); + const ancestors = nodeWrapper.ancestors(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/FunctionDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/FunctionDefinitionHighlighter.ts index b602dd1c..6a19c40a 100644 --- a/server/src/services/semanticHighlight/highlighters/FunctionDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/FunctionDefinitionHighlighter.ts @@ -9,11 +9,11 @@ export class FunctionDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes(); + const ancestors = nodeWrapper.ancestors(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && - ancestors[ancestors.length - 1]?.kind === RuleKind.FunctionDefinition + ancestors[ancestors.length - 2]?.kind === RuleKind.FunctionDefinition ) { this.tokenBuilder.addToken(nodeWrapper, SemanticTokenTypes.function); } diff --git a/server/src/services/semanticHighlight/highlighters/InterfaceDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/InterfaceDefinitionHighlighter.ts index 1462ebcc..352b047c 100644 --- a/server/src/services/semanticHighlight/highlighters/InterfaceDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/InterfaceDefinitionHighlighter.ts @@ -9,7 +9,7 @@ export class InterfaceDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes(); + const ancestors = nodeWrapper.ancestors(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/LibraryDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/LibraryDefinitionHighlighter.ts index 119c277b..528a0b0d 100644 --- a/server/src/services/semanticHighlight/highlighters/LibraryDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/LibraryDefinitionHighlighter.ts @@ -8,7 +8,7 @@ export class LibraryDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes(); + const ancestors = nodeWrapper.ancestors(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/StructDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/StructDefinitionHighlighter.ts index e5e73ba1..f2cf492a 100644 --- a/server/src/services/semanticHighlight/highlighters/StructDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/StructDefinitionHighlighter.ts @@ -9,7 +9,7 @@ export class StructDefinitionHighlighter extends HighlightVisitor { public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes(); + const ancestors = nodeWrapper.ancestors(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter copy.ts b/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter copy.ts index d60619f9..9e827334 100644 --- a/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter copy.ts +++ b/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter copy.ts @@ -8,7 +8,7 @@ export class UserDefinedValueTypeDefinitionHighlighter extends HighlightVisitor public tokenKinds = new Set([TokenKind.Identifier]); public enter(nodeWrapper: SlangNodeWrapper): void { - const ancestors = nodeWrapper.pathRuleNodes(); + const ancestors = nodeWrapper.ancestors(); if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && diff --git a/server/src/services/semanticHighlight/onSemanticTokensFull.ts b/server/src/services/semanticHighlight/onSemanticTokensFull.ts index 97ef7d18..750bc0a7 100644 --- a/server/src/services/semanticHighlight/onSemanticTokensFull.ts +++ b/server/src/services/semanticHighlight/onSemanticTokensFull.ts @@ -7,7 +7,7 @@ import { } from "vscode-languageserver-protocol"; import _, { Dictionary } from "lodash"; import { analyze } from "@nomicfoundation/solidity-analyzer"; -import { ProductionKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { TokenNode } from "@nomicfoundation/slang/cst"; import { ServerState } from "../../types"; import { getLanguage } from "../../parser/slangHelpers"; @@ -61,7 +61,7 @@ export function onSemanticTokensFull(serverState: ServerState) { span = transaction.startChild({ op: "slang-parsing" }); const parseOutput = language.parse( - ProductionKind.SourceUnit, + RuleKind.SourceUnit, document.getText() ); @@ -101,15 +101,14 @@ export function onSemanticTokensFull(serverState: ServerState) { } const cursor = parseOutput.createTreeCursor(); - let node: TokenNode | null = null; span = transaction.startChild({ op: "walk-highlight-tokens" }); - while ( - (node = cursor.findTokenWithKind(registeredTokenKinds)) !== null - ) { + while (cursor.goToNextTokenWithKinds(registeredTokenKinds)) { + const node = cursor.node() as TokenNode; + const nodeWrapper = { kind: node.kind, - pathRuleNodes: () => cursor.pathRuleNodes(), + ancestors: () => cursor.ancestors(), text: node.text, textRange: cursor.textRange, type: node.type, @@ -119,8 +118,6 @@ export function onSemanticTokensFull(serverState: ServerState) { for (const visitor of registeredVisitors) { visitor.enter(nodeWrapper); } - - cursor.goToNext(); } span.finish(); diff --git a/test/protocol/test/textDocument/documentSymbol/documentSymbol.test.ts b/test/protocol/test/textDocument/documentSymbol/documentSymbol.test.ts index 14216fca..e6e108b4 100644 --- a/test/protocol/test/textDocument/documentSymbol/documentSymbol.test.ts +++ b/test/protocol/test/textDocument/documentSymbol/documentSymbol.test.ts @@ -418,8 +418,8 @@ describe('[hardhat] documentSymbol', () => { character: 0, }, end: { - line: 35, - character: 21, + line: 36, + character: 0, }, }, selectionRange: { @@ -644,8 +644,8 @@ describe('[hardhat] documentSymbol', () => { character: 0, }, end: { - line: 62, - character: 39, + line: 63, + character: 0, }, }, selectionRange: { @@ -669,8 +669,8 @@ describe('[hardhat] documentSymbol', () => { character: 0, }, end: { - line: 64, - character: 41, + line: 65, + character: 0, }, }, selectionRange: { @@ -694,8 +694,8 @@ describe('[hardhat] documentSymbol', () => { character: 0, }, end: { - line: 65, - character: 42, + line: 66, + character: 0, }, }, selectionRange: { @@ -719,8 +719,8 @@ describe('[hardhat] documentSymbol', () => { character: 0, }, end: { - line: 77, - character: 35, + line: 78, + character: 0, }, }, selectionRange: { From e1a102de185cc24cd75e2b86b1505f2151a45f8d Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Wed, 21 Feb 2024 17:15:46 +0100 Subject: [PATCH 03/14] chore: Upgrade to slang v0.13.0 --- client/scripts/bundle.js | 20 +-- package-lock.json | 160 +++++++++--------- server/package.json | 2 +- .../services/documentSymbol/SymbolVisitor.ts | 2 +- 4 files changed, 92 insertions(+), 92 deletions(-) diff --git a/client/scripts/bundle.js b/client/scripts/bundle.js index 8d74e2d4..3268aeec 100755 --- a/client/scripts/bundle.js +++ b/client/scripts/bundle.js @@ -200,16 +200,16 @@ async function main() { "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", - "@nomicfoundation/slang": "0.12.0", - "@nomicfoundation/slang-darwin-arm64": "0.12.0", - "@nomicfoundation/slang-win32-arm64-msvc": "0.12.0", - "@nomicfoundation/slang-linux-arm64-gnu": "0.12.0", - "@nomicfoundation/slang-linux-arm64-musl": "0.12.0", - "@nomicfoundation/slang-win32-ia32-msvc": "0.12.0", - "@nomicfoundation/slang-darwin-x64": "0.12.0", - "@nomicfoundation/slang-win32-x64-msvc": "0.12.0", - "@nomicfoundation/slang-linux-x64-gnu": "0.12.0", - "@nomicfoundation/slang-linux-x64-musl": "0.12.0", + "@nomicfoundation/slang": "0.13.0", + "@nomicfoundation/slang-darwin-arm64": "0.13.0", + "@nomicfoundation/slang-win32-arm64-msvc": "0.13.0", + "@nomicfoundation/slang-linux-arm64-gnu": "0.13.0", + "@nomicfoundation/slang-linux-arm64-musl": "0.13.0", + "@nomicfoundation/slang-win32-ia32-msvc": "0.13.0", + "@nomicfoundation/slang-darwin-x64": "0.13.0", + "@nomicfoundation/slang-win32-x64-msvc": "0.13.0", + "@nomicfoundation/slang-linux-x64-gnu": "0.13.0", + "@nomicfoundation/slang-linux-x64-musl": "0.13.0", }, }) ); diff --git a/package-lock.json b/package-lock.json index 127f941e..567e7b64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2667,28 +2667,28 @@ } }, "node_modules/@nomicfoundation/slang": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.12.0.tgz", - "integrity": "sha512-rphWJzPj+b7Q6GCJQxJrIKqGsT+vmofMUGJuYBES4G0COdYn+EKKDPJcGhbwWvJK0jrcNX6V+Ki5/nhlTTl9rQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.13.1.tgz", + "integrity": "sha512-QbMjVXvLnXY0A/M5BVOMjNT0NrLRSodpYN8YZC7bZBhNdMPp1XQbaJDs8l0QC8jbIS9mAMA1r+YKxZyxftdWjw==", "engines": { "node": ">= 10" }, "optionalDependencies": { - "@nomicfoundation/slang-darwin-arm64": "0.12.0", - "@nomicfoundation/slang-darwin-x64": "0.12.0", - "@nomicfoundation/slang-linux-arm64-gnu": "0.12.0", - "@nomicfoundation/slang-linux-arm64-musl": "0.12.0", - "@nomicfoundation/slang-linux-x64-gnu": "0.12.0", - "@nomicfoundation/slang-linux-x64-musl": "0.12.0", - "@nomicfoundation/slang-win32-arm64-msvc": "0.12.0", - "@nomicfoundation/slang-win32-ia32-msvc": "0.12.0", - "@nomicfoundation/slang-win32-x64-msvc": "0.12.0" + "@nomicfoundation/slang-darwin-arm64": "0.13.1", + "@nomicfoundation/slang-darwin-x64": "0.13.1", + "@nomicfoundation/slang-linux-arm64-gnu": "0.13.1", + "@nomicfoundation/slang-linux-arm64-musl": "0.13.1", + "@nomicfoundation/slang-linux-x64-gnu": "0.13.1", + "@nomicfoundation/slang-linux-x64-musl": "0.13.1", + "@nomicfoundation/slang-win32-arm64-msvc": "0.13.1", + "@nomicfoundation/slang-win32-ia32-msvc": "0.13.1", + "@nomicfoundation/slang-win32-x64-msvc": "0.13.1" } }, "node_modules/@nomicfoundation/slang-darwin-arm64": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.12.0.tgz", - "integrity": "sha512-FCZA8rghL8rICf3xZFD74ZhEx7xLJw2SanNVCx+tiYJXfCcoKTpAMlj3bRSlDNri7weEo+/UUDRKKMK695Allw==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.13.1.tgz", + "integrity": "sha512-1TBJM9NIVox/eR1WOszoJpJR2KcBcQ7dwWnO5Zt9v/XQnDdIYj3BxootWOuyQQGrGccKYCX0VivTQNMPnxHmAA==", "cpu": [ "arm64" ], @@ -2701,9 +2701,9 @@ } }, "node_modules/@nomicfoundation/slang-darwin-x64": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.12.0.tgz", - "integrity": "sha512-hgOIcn6ZjRdBwPq2ZQHc2EOUyOWGlFxL1wlUPkoMr3gJFmzHpetqJ9pwkEKTUKhrnBc8FAtQYwbniyHcXin32g==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.13.1.tgz", + "integrity": "sha512-jOj9703Q71ShKuMR09B0dmmkBRFXfSj8zy1PG1tJcSWqrDfyvlOFQDszhxA0zs4/mYDmyHVhKjzkUoq0tl/GYw==", "cpu": [ "x64" ], @@ -2716,9 +2716,9 @@ } }, "node_modules/@nomicfoundation/slang-linux-arm64-gnu": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.12.0.tgz", - "integrity": "sha512-/nlMW7Qgtffc32NR+Bcil52GMAqoALyBUF/U70mINlOmHghfv7Z6znt17bZ4h2IR//xK9PYcpjoMafY044sj2A==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.13.1.tgz", + "integrity": "sha512-CQVrCAqHAGBstvIhoeTabWXjUsH/XIzisALbU9crC8zZCacKaYwaqQUgLo894HIWPBQKTxMec03UzFwO56QyQQ==", "cpu": [ "arm64" ], @@ -2731,9 +2731,9 @@ } }, "node_modules/@nomicfoundation/slang-linux-arm64-musl": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.12.0.tgz", - "integrity": "sha512-n75FdDrVH4X7ZPUYa3C2oiqnGyWBjpLbKHtvgi951gDV4osCsLtzSAZbm40o0t8837AGU+gb2mksBRJbx+Gusg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.13.1.tgz", + "integrity": "sha512-ILGuXf1+qtPE2noN5T+T1Pd5i93mDrh42k53/6fUGLJ/THs16fhxD55A+EpbLSgnnQMAnK6P+DlKFf4wGI/jlw==", "cpu": [ "arm64" ], @@ -2746,9 +2746,9 @@ } }, "node_modules/@nomicfoundation/slang-linux-x64-gnu": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.12.0.tgz", - "integrity": "sha512-nQcrHdiEQOqBpa8Uj3X8WKdhbPigFzB4logIXUqu2si0s0JPAn4PETw23H/+ul/PXkQE+lGQQCdrwSChDquYkQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.13.1.tgz", + "integrity": "sha512-djxpqYNtKQB4sT22G0QbSX5c/QdnU7mUmvX+SDh5EZeA+TqeumODZQhUsF/n9I8F28XL/fmLygCf5aFbAX3Egg==", "cpu": [ "x64" ], @@ -2761,9 +2761,9 @@ } }, "node_modules/@nomicfoundation/slang-linux-x64-musl": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.12.0.tgz", - "integrity": "sha512-L0yKk25RxpwKH0vZ3qPsUgHnjpjcGYUedG4PPrk3PU5TgPvFjyMXuvwvjZcLMGFWJelQV37QipXbfRSyALLmSQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.13.1.tgz", + "integrity": "sha512-TugHmWIGgeXirbn5PlSACJ9E7/08bp3fiDrnj6ufGBiW6LLJG74Hn6fxwDURa3wtFiLy4lbt+dWZ5/YnuY+QOw==", "cpu": [ "x64" ], @@ -2776,9 +2776,9 @@ } }, "node_modules/@nomicfoundation/slang-win32-arm64-msvc": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.12.0.tgz", - "integrity": "sha512-Zecx/ZmZ3uffDNyuqeCdeDvnEZXMcVLLbsjf3RT+C8x2j3Li4YJpdf3fszGvdhaq+S7tIeCS2JP+KbgtOadXjQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.13.1.tgz", + "integrity": "sha512-EDyO3AaVuR6E/omAzmCgXHrm0XNLvQk2RoW1AKr5VOayR3TITDTCvnubpr17AAWOzRH5dc/90esnFbqa0cHX2g==", "cpu": [ "arm64" ], @@ -2791,9 +2791,9 @@ } }, "node_modules/@nomicfoundation/slang-win32-ia32-msvc": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.12.0.tgz", - "integrity": "sha512-w8Y2WENBlB9XzeaiBiE3VbxLPpXHm9/dZvKXq7o/3yfvRedKjbHHJoEH0ubfXFHXDfADh+7Va/B0o8ja/sHkNQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.13.1.tgz", + "integrity": "sha512-5ypLao+OGoXcoHS/3LTJSRHHHMSZ5/aLtOOYby3Qe7sG6gdfp2n7OWQYjS1uZ6SA591z1sXbYsKkHi7Aej8nJQ==", "cpu": [ "ia32" ], @@ -2806,9 +2806,9 @@ } }, "node_modules/@nomicfoundation/slang-win32-x64-msvc": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.12.0.tgz", - "integrity": "sha512-YnPv5ZYcUD1HVa3WEFcjd+xnlsNKBtfzMRLHRTOF344ZoJvmQ5HsNKD/nmPtaRA7SwAVvm7bwZ7JCzO/6bUIzw==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.13.1.tgz", + "integrity": "sha512-XDQCE81ToyHeRxdznwacXZiH3dMoTtlrFrrHhU/Zdas2p8F1fkLVuzXBKlrB7fMVd7cIDByG3d9iWdDy/SQIwA==", "cpu": [ "x64" ], @@ -12033,7 +12033,7 @@ "version": "0.7.2", "license": "MIT", "dependencies": { - "@nomicfoundation/slang": "^0.12.0", + "@nomicfoundation/slang": "^0.13.0", "@nomicfoundation/solidity-analyzer": "0.1.1" }, "bin": { @@ -14810,73 +14810,73 @@ } }, "@nomicfoundation/slang": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.12.0.tgz", - "integrity": "sha512-rphWJzPj+b7Q6GCJQxJrIKqGsT+vmofMUGJuYBES4G0COdYn+EKKDPJcGhbwWvJK0jrcNX6V+Ki5/nhlTTl9rQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang/-/slang-0.13.1.tgz", + "integrity": "sha512-QbMjVXvLnXY0A/M5BVOMjNT0NrLRSodpYN8YZC7bZBhNdMPp1XQbaJDs8l0QC8jbIS9mAMA1r+YKxZyxftdWjw==", "requires": { - "@nomicfoundation/slang-darwin-arm64": "0.12.0", - "@nomicfoundation/slang-darwin-x64": "0.12.0", - "@nomicfoundation/slang-linux-arm64-gnu": "0.12.0", - "@nomicfoundation/slang-linux-arm64-musl": "0.12.0", - "@nomicfoundation/slang-linux-x64-gnu": "0.12.0", - "@nomicfoundation/slang-linux-x64-musl": "0.12.0", - "@nomicfoundation/slang-win32-arm64-msvc": "0.12.0", - "@nomicfoundation/slang-win32-ia32-msvc": "0.12.0", - "@nomicfoundation/slang-win32-x64-msvc": "0.12.0" + "@nomicfoundation/slang-darwin-arm64": "0.13.1", + "@nomicfoundation/slang-darwin-x64": "0.13.1", + "@nomicfoundation/slang-linux-arm64-gnu": "0.13.1", + "@nomicfoundation/slang-linux-arm64-musl": "0.13.1", + "@nomicfoundation/slang-linux-x64-gnu": "0.13.1", + "@nomicfoundation/slang-linux-x64-musl": "0.13.1", + "@nomicfoundation/slang-win32-arm64-msvc": "0.13.1", + "@nomicfoundation/slang-win32-ia32-msvc": "0.13.1", + "@nomicfoundation/slang-win32-x64-msvc": "0.13.1" } }, "@nomicfoundation/slang-darwin-arm64": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.12.0.tgz", - "integrity": "sha512-FCZA8rghL8rICf3xZFD74ZhEx7xLJw2SanNVCx+tiYJXfCcoKTpAMlj3bRSlDNri7weEo+/UUDRKKMK695Allw==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-arm64/-/slang-darwin-arm64-0.13.1.tgz", + "integrity": "sha512-1TBJM9NIVox/eR1WOszoJpJR2KcBcQ7dwWnO5Zt9v/XQnDdIYj3BxootWOuyQQGrGccKYCX0VivTQNMPnxHmAA==", "optional": true }, "@nomicfoundation/slang-darwin-x64": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.12.0.tgz", - "integrity": "sha512-hgOIcn6ZjRdBwPq2ZQHc2EOUyOWGlFxL1wlUPkoMr3gJFmzHpetqJ9pwkEKTUKhrnBc8FAtQYwbniyHcXin32g==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-darwin-x64/-/slang-darwin-x64-0.13.1.tgz", + "integrity": "sha512-jOj9703Q71ShKuMR09B0dmmkBRFXfSj8zy1PG1tJcSWqrDfyvlOFQDszhxA0zs4/mYDmyHVhKjzkUoq0tl/GYw==", "optional": true }, "@nomicfoundation/slang-linux-arm64-gnu": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.12.0.tgz", - "integrity": "sha512-/nlMW7Qgtffc32NR+Bcil52GMAqoALyBUF/U70mINlOmHghfv7Z6znt17bZ4h2IR//xK9PYcpjoMafY044sj2A==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-gnu/-/slang-linux-arm64-gnu-0.13.1.tgz", + "integrity": "sha512-CQVrCAqHAGBstvIhoeTabWXjUsH/XIzisALbU9crC8zZCacKaYwaqQUgLo894HIWPBQKTxMec03UzFwO56QyQQ==", "optional": true }, "@nomicfoundation/slang-linux-arm64-musl": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.12.0.tgz", - "integrity": "sha512-n75FdDrVH4X7ZPUYa3C2oiqnGyWBjpLbKHtvgi951gDV4osCsLtzSAZbm40o0t8837AGU+gb2mksBRJbx+Gusg==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-arm64-musl/-/slang-linux-arm64-musl-0.13.1.tgz", + "integrity": "sha512-ILGuXf1+qtPE2noN5T+T1Pd5i93mDrh42k53/6fUGLJ/THs16fhxD55A+EpbLSgnnQMAnK6P+DlKFf4wGI/jlw==", "optional": true }, "@nomicfoundation/slang-linux-x64-gnu": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.12.0.tgz", - "integrity": "sha512-nQcrHdiEQOqBpa8Uj3X8WKdhbPigFzB4logIXUqu2si0s0JPAn4PETw23H/+ul/PXkQE+lGQQCdrwSChDquYkQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-gnu/-/slang-linux-x64-gnu-0.13.1.tgz", + "integrity": "sha512-djxpqYNtKQB4sT22G0QbSX5c/QdnU7mUmvX+SDh5EZeA+TqeumODZQhUsF/n9I8F28XL/fmLygCf5aFbAX3Egg==", "optional": true }, "@nomicfoundation/slang-linux-x64-musl": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.12.0.tgz", - "integrity": "sha512-L0yKk25RxpwKH0vZ3qPsUgHnjpjcGYUedG4PPrk3PU5TgPvFjyMXuvwvjZcLMGFWJelQV37QipXbfRSyALLmSQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-linux-x64-musl/-/slang-linux-x64-musl-0.13.1.tgz", + "integrity": "sha512-TugHmWIGgeXirbn5PlSACJ9E7/08bp3fiDrnj6ufGBiW6LLJG74Hn6fxwDURa3wtFiLy4lbt+dWZ5/YnuY+QOw==", "optional": true }, "@nomicfoundation/slang-win32-arm64-msvc": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.12.0.tgz", - "integrity": "sha512-Zecx/ZmZ3uffDNyuqeCdeDvnEZXMcVLLbsjf3RT+C8x2j3Li4YJpdf3fszGvdhaq+S7tIeCS2JP+KbgtOadXjQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-arm64-msvc/-/slang-win32-arm64-msvc-0.13.1.tgz", + "integrity": "sha512-EDyO3AaVuR6E/omAzmCgXHrm0XNLvQk2RoW1AKr5VOayR3TITDTCvnubpr17AAWOzRH5dc/90esnFbqa0cHX2g==", "optional": true }, "@nomicfoundation/slang-win32-ia32-msvc": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.12.0.tgz", - "integrity": "sha512-w8Y2WENBlB9XzeaiBiE3VbxLPpXHm9/dZvKXq7o/3yfvRedKjbHHJoEH0ubfXFHXDfADh+7Va/B0o8ja/sHkNQ==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-ia32-msvc/-/slang-win32-ia32-msvc-0.13.1.tgz", + "integrity": "sha512-5ypLao+OGoXcoHS/3LTJSRHHHMSZ5/aLtOOYby3Qe7sG6gdfp2n7OWQYjS1uZ6SA591z1sXbYsKkHi7Aej8nJQ==", "optional": true }, "@nomicfoundation/slang-win32-x64-msvc": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.12.0.tgz", - "integrity": "sha512-YnPv5ZYcUD1HVa3WEFcjd+xnlsNKBtfzMRLHRTOF344ZoJvmQ5HsNKD/nmPtaRA7SwAVvm7bwZ7JCzO/6bUIzw==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/slang-win32-x64-msvc/-/slang-win32-x64-msvc-0.13.1.tgz", + "integrity": "sha512-XDQCE81ToyHeRxdznwacXZiH3dMoTtlrFrrHhU/Zdas2p8F1fkLVuzXBKlrB7fMVd7cIDByG3d9iWdDy/SQIwA==", "optional": true }, "@nomicfoundation/solidity-analyzer": { @@ -14958,7 +14958,7 @@ "version": "file:server", "requires": { "@istanbuljs/nyc-config-typescript": "1.0.2", - "@nomicfoundation/slang": "^0.12.0", + "@nomicfoundation/slang": "^0.13.0", "@nomicfoundation/solidity-analyzer": "0.1.1", "@sentry/node": "7.32.1", "@sentry/tracing": "7.32.1", diff --git a/server/package.json b/server/package.json index 7939fe66..743f717a 100644 --- a/server/package.json +++ b/server/package.json @@ -87,7 +87,7 @@ "yaml": "^2.2.1" }, "dependencies": { - "@nomicfoundation/slang": "^0.12.0", + "@nomicfoundation/slang": "^0.13.0", "@nomicfoundation/solidity-analyzer": "0.1.1" } } diff --git a/server/src/services/documentSymbol/SymbolVisitor.ts b/server/src/services/documentSymbol/SymbolVisitor.ts index 4e85bb7a..6e17ffed 100644 --- a/server/src/services/documentSymbol/SymbolVisitor.ts +++ b/server/src/services/documentSymbol/SymbolVisitor.ts @@ -27,7 +27,7 @@ export abstract class SymbolVisitor { // Find identifier const childCursor = cursor.spawn(); - while (childCursor.goToNextTokenWithKinds([this.nameTokenKind])) { + while (childCursor.goToNextTokenWithKind(this.nameTokenKind)) { const nameToken = childCursor.node() as TokenNode; // TODO: Handle FunctionDefinition > FunctionName > Identifier (depth = 2) From 97d06d285f4aa1d9134e4d5aa1dec139f73a27f5 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Wed, 21 Feb 2024 17:18:49 +0100 Subject: [PATCH 04/14] chore: Make sure we use slang v0.13.1 This introduced support for EVM built-ins, so this should substantially increase correct parse coverage. --- client/scripts/bundle.js | 20 ++++++++++---------- package-lock.json | 4 ++-- server/package.json | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/client/scripts/bundle.js b/client/scripts/bundle.js index 3268aeec..4a661fab 100755 --- a/client/scripts/bundle.js +++ b/client/scripts/bundle.js @@ -200,16 +200,16 @@ async function main() { "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", - "@nomicfoundation/slang": "0.13.0", - "@nomicfoundation/slang-darwin-arm64": "0.13.0", - "@nomicfoundation/slang-win32-arm64-msvc": "0.13.0", - "@nomicfoundation/slang-linux-arm64-gnu": "0.13.0", - "@nomicfoundation/slang-linux-arm64-musl": "0.13.0", - "@nomicfoundation/slang-win32-ia32-msvc": "0.13.0", - "@nomicfoundation/slang-darwin-x64": "0.13.0", - "@nomicfoundation/slang-win32-x64-msvc": "0.13.0", - "@nomicfoundation/slang-linux-x64-gnu": "0.13.0", - "@nomicfoundation/slang-linux-x64-musl": "0.13.0", + "@nomicfoundation/slang": "0.13.1", + "@nomicfoundation/slang-darwin-arm64": "0.13.1", + "@nomicfoundation/slang-win32-arm64-msvc": "0.13.1", + "@nomicfoundation/slang-linux-arm64-gnu": "0.13.1", + "@nomicfoundation/slang-linux-arm64-musl": "0.13.1", + "@nomicfoundation/slang-win32-ia32-msvc": "0.13.1", + "@nomicfoundation/slang-darwin-x64": "0.13.1", + "@nomicfoundation/slang-win32-x64-msvc": "0.13.1", + "@nomicfoundation/slang-linux-x64-gnu": "0.13.1", + "@nomicfoundation/slang-linux-x64-musl": "0.13.1", }, }) ); diff --git a/package-lock.json b/package-lock.json index 567e7b64..762fe710 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12033,7 +12033,7 @@ "version": "0.7.2", "license": "MIT", "dependencies": { - "@nomicfoundation/slang": "^0.13.0", + "@nomicfoundation/slang": "^0.13.1", "@nomicfoundation/solidity-analyzer": "0.1.1" }, "bin": { @@ -14958,7 +14958,7 @@ "version": "file:server", "requires": { "@istanbuljs/nyc-config-typescript": "1.0.2", - "@nomicfoundation/slang": "^0.13.0", + "@nomicfoundation/slang": "^0.13.1", "@nomicfoundation/solidity-analyzer": "0.1.1", "@sentry/node": "7.32.1", "@sentry/tracing": "7.32.1", diff --git a/server/package.json b/server/package.json index 743f717a..9a61e103 100644 --- a/server/package.json +++ b/server/package.json @@ -87,7 +87,7 @@ "yaml": "^2.2.1" }, "dependencies": { - "@nomicfoundation/slang": "^0.13.0", + "@nomicfoundation/slang": "^0.13.1", "@nomicfoundation/solidity-analyzer": "0.1.1" } } From 3361c428e971c2ca00b6499f715dcd2057821e67 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Wed, 21 Feb 2024 19:52:26 +0100 Subject: [PATCH 05/14] refactor: Support more deeply nested node symbol names in SymbolVisitor --- .../src/services/documentSymbol/SymbolVisitor.ts | 16 ++++++---------- .../visitors/ConstantDefinition.ts | 4 ++-- .../visitors/ConstructorDefinition.ts | 7 +++++-- .../visitors/ContractDefinition.ts | 4 ++-- .../documentSymbol/visitors/EnumDefinition.ts | 4 ++-- .../documentSymbol/visitors/ErrorDefinition.ts | 4 ++-- .../documentSymbol/visitors/EventDefinition.ts | 4 ++-- .../visitors/FallbackFunctionDefinition.ts | 7 +++++-- .../visitors/FunctionDefinition.ts | 6 ++++-- .../visitors/InterfaceDefinition.ts | 4 ++-- .../documentSymbol/visitors/LibraryDefinition.ts | 4 ++-- .../visitors/ModifierDefinition.ts | 4 ++-- .../visitors/ReceiveFunctionDefinition.ts | 7 +++++-- .../visitors/StateVariableDeclaration.ts | 4 ++-- .../documentSymbol/visitors/StructDefinition.ts | 4 ++-- .../documentSymbol/visitors/StructMember.ts | 4 ++-- .../visitors/UnnamedFunctionDefinition.ts | 7 +++++-- .../visitors/UserDefinedValueTypeDefinition.ts | 4 ++-- .../visitors/VariableDeclaration.ts | 4 ++-- .../visitors/YulFunctionDefinition.ts | 4 ++-- 20 files changed, 58 insertions(+), 48 deletions(-) diff --git a/server/src/services/documentSymbol/SymbolVisitor.ts b/server/src/services/documentSymbol/SymbolVisitor.ts index 6e17ffed..420be5bb 100644 --- a/server/src/services/documentSymbol/SymbolVisitor.ts +++ b/server/src/services/documentSymbol/SymbolVisitor.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { SymbolKind } from "vscode-languageserver-types"; import _ from "lodash"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { TokenNode } from "@nomicfoundation/slang/cst"; import { TextDocument } from "vscode-languageserver-textdocument"; import { Cursor } from "@nomicfoundation/slang/cursor"; @@ -11,7 +11,8 @@ import { SymbolTreeBuilder } from "./SymbolTreeBuilder"; export abstract class SymbolVisitor { public abstract ruleKind: RuleKind; public abstract symbolKind: SymbolKind; - public abstract nameTokenKind: TokenKind; + /** The token that contains the name of the symbol represented by the rule. */ + public abstract nameToken: readonly [FieldName, TokenKind]; constructor( public document: TextDocument, @@ -27,15 +28,10 @@ export abstract class SymbolVisitor { // Find identifier const childCursor = cursor.spawn(); - while (childCursor.goToNextTokenWithKind(this.nameTokenKind)) { - const nameToken = childCursor.node() as TokenNode; + while (childCursor.goToNextTokenWithKind(this.nameToken[1])) { + if (childCursor.nodeName === this.nameToken[0]) { + const nameToken = childCursor.node() as TokenNode; - // TODO: Handle FunctionDefinition > FunctionName > Identifier (depth = 2) - const isFunctionName = - childCursor.depth === 2 && - childCursor.ancestors()[childCursor.ancestors().length - 1]?.kind === - RuleKind.FunctionName; - if (childCursor.depth === 1 || isFunctionName) { symbolName = nameToken.text; selectionRange = slangToVSCodeRange( this.document, diff --git a/server/src/services/documentSymbol/visitors/ConstantDefinition.ts b/server/src/services/documentSymbol/visitors/ConstantDefinition.ts index a83013d5..a26c16fc 100644 --- a/server/src/services/documentSymbol/visitors/ConstantDefinition.ts +++ b/server/src/services/documentSymbol/visitors/ConstantDefinition.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { RuleKind, TokenKind, FieldName } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class ConstantDefinition extends SymbolVisitor { public ruleKind = RuleKind.ConstantDefinition; public symbolKind = SymbolKind.Constant; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/ConstructorDefinition.ts b/server/src/services/documentSymbol/visitors/ConstructorDefinition.ts index c1faaee9..5586c4ed 100644 --- a/server/src/services/documentSymbol/visitors/ConstructorDefinition.ts +++ b/server/src/services/documentSymbol/visitors/ConstructorDefinition.ts @@ -1,9 +1,12 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { RuleKind, TokenKind, FieldName } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class ConstructorDefinition extends SymbolVisitor { public ruleKind = RuleKind.ConstructorDefinition; public symbolKind = SymbolKind.Constructor; - public nameTokenKind = TokenKind.ConstructorKeyword; + public nameToken = [ + FieldName.ConstructorKeyword, + TokenKind.ConstructorKeyword, + ] as const; } diff --git a/server/src/services/documentSymbol/visitors/ContractDefinition.ts b/server/src/services/documentSymbol/visitors/ContractDefinition.ts index e5f0a9d3..2236cda8 100644 --- a/server/src/services/documentSymbol/visitors/ContractDefinition.ts +++ b/server/src/services/documentSymbol/visitors/ContractDefinition.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class ContractDefinition extends SymbolVisitor { public ruleKind = RuleKind.ContractDefinition; public symbolKind = SymbolKind.Class; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/EnumDefinition.ts b/server/src/services/documentSymbol/visitors/EnumDefinition.ts index e27f715f..3bfbe56f 100644 --- a/server/src/services/documentSymbol/visitors/EnumDefinition.ts +++ b/server/src/services/documentSymbol/visitors/EnumDefinition.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class EnumDefinition extends SymbolVisitor { public ruleKind = RuleKind.EnumDefinition; public symbolKind = SymbolKind.Enum; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/ErrorDefinition.ts b/server/src/services/documentSymbol/visitors/ErrorDefinition.ts index 7f607faa..caf7382b 100644 --- a/server/src/services/documentSymbol/visitors/ErrorDefinition.ts +++ b/server/src/services/documentSymbol/visitors/ErrorDefinition.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { RuleKind, TokenKind, FieldName } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class ErrorDefinition extends SymbolVisitor { public ruleKind = RuleKind.ErrorDefinition; public symbolKind = SymbolKind.Event; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/EventDefinition.ts b/server/src/services/documentSymbol/visitors/EventDefinition.ts index 32bb90eb..7606905b 100644 --- a/server/src/services/documentSymbol/visitors/EventDefinition.ts +++ b/server/src/services/documentSymbol/visitors/EventDefinition.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { RuleKind, TokenKind, FieldName } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class EventDefinition extends SymbolVisitor { public ruleKind = RuleKind.EventDefinition; public symbolKind = SymbolKind.Event; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/FallbackFunctionDefinition.ts b/server/src/services/documentSymbol/visitors/FallbackFunctionDefinition.ts index 379b94ce..46dbd6c9 100644 --- a/server/src/services/documentSymbol/visitors/FallbackFunctionDefinition.ts +++ b/server/src/services/documentSymbol/visitors/FallbackFunctionDefinition.ts @@ -1,9 +1,12 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class FallbackFunctionDefinition extends SymbolVisitor { public ruleKind = RuleKind.FallbackFunctionDefinition; public symbolKind = SymbolKind.Function; - public nameTokenKind = TokenKind.FallbackKeyword; + public nameToken = [ + FieldName.FallbackKeyword, + TokenKind.FallbackKeyword, + ] as const; } diff --git a/server/src/services/documentSymbol/visitors/FunctionDefinition.ts b/server/src/services/documentSymbol/visitors/FunctionDefinition.ts index 4f336bec..006ceb89 100644 --- a/server/src/services/documentSymbol/visitors/FunctionDefinition.ts +++ b/server/src/services/documentSymbol/visitors/FunctionDefinition.ts @@ -1,9 +1,11 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class FunctionDefinition extends SymbolVisitor { public ruleKind = RuleKind.FunctionDefinition; public symbolKind = SymbolKind.Function; - public nameTokenKind = TokenKind.Identifier; + // TODO: Support functions named "receive" and "fallback" post 0.6.0 + // (they use TokenKind.{ReceiveKeyword, FallbackKeyword} instead) + public nameToken = [FieldName.Variant, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/InterfaceDefinition.ts b/server/src/services/documentSymbol/visitors/InterfaceDefinition.ts index 7bf9ae13..638de747 100644 --- a/server/src/services/documentSymbol/visitors/InterfaceDefinition.ts +++ b/server/src/services/documentSymbol/visitors/InterfaceDefinition.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class InterfaceDefinition extends SymbolVisitor { public ruleKind = RuleKind.InterfaceDefinition; public symbolKind = SymbolKind.Interface; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/LibraryDefinition.ts b/server/src/services/documentSymbol/visitors/LibraryDefinition.ts index 2d54d91d..812110a6 100644 --- a/server/src/services/documentSymbol/visitors/LibraryDefinition.ts +++ b/server/src/services/documentSymbol/visitors/LibraryDefinition.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class LibraryDefinition extends SymbolVisitor { public ruleKind = RuleKind.LibraryDefinition; public symbolKind = SymbolKind.Class; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/ModifierDefinition.ts b/server/src/services/documentSymbol/visitors/ModifierDefinition.ts index 0456ab4b..623b21ac 100644 --- a/server/src/services/documentSymbol/visitors/ModifierDefinition.ts +++ b/server/src/services/documentSymbol/visitors/ModifierDefinition.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class ModifierDefinition extends SymbolVisitor { public ruleKind = RuleKind.ModifierDefinition; public symbolKind = SymbolKind.Function; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/ReceiveFunctionDefinition.ts b/server/src/services/documentSymbol/visitors/ReceiveFunctionDefinition.ts index 8927c6b0..e0185b31 100644 --- a/server/src/services/documentSymbol/visitors/ReceiveFunctionDefinition.ts +++ b/server/src/services/documentSymbol/visitors/ReceiveFunctionDefinition.ts @@ -1,9 +1,12 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class ReceiveFunctionDefinition extends SymbolVisitor { public ruleKind = RuleKind.ReceiveFunctionDefinition; public symbolKind = SymbolKind.Function; - public nameTokenKind = TokenKind.ReceiveKeyword; + public nameToken = [ + FieldName.ReceiveKeyword, + TokenKind.ReceiveKeyword, + ] as const; } diff --git a/server/src/services/documentSymbol/visitors/StateVariableDeclaration.ts b/server/src/services/documentSymbol/visitors/StateVariableDeclaration.ts index 7f6b17e9..212b8ccd 100644 --- a/server/src/services/documentSymbol/visitors/StateVariableDeclaration.ts +++ b/server/src/services/documentSymbol/visitors/StateVariableDeclaration.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class StateVariableDeclaration extends SymbolVisitor { public ruleKind = RuleKind.StateVariableDefinition; public symbolKind = SymbolKind.Property; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/StructDefinition.ts b/server/src/services/documentSymbol/visitors/StructDefinition.ts index 5f9b69a5..f6a9c59a 100644 --- a/server/src/services/documentSymbol/visitors/StructDefinition.ts +++ b/server/src/services/documentSymbol/visitors/StructDefinition.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class StructDefinition extends SymbolVisitor { public ruleKind = RuleKind.StructDefinition; public symbolKind = SymbolKind.Struct; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/StructMember.ts b/server/src/services/documentSymbol/visitors/StructMember.ts index b3f6e734..f2f1e0f6 100644 --- a/server/src/services/documentSymbol/visitors/StructMember.ts +++ b/server/src/services/documentSymbol/visitors/StructMember.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class StructMember extends SymbolVisitor { public ruleKind = RuleKind.StructMember; public symbolKind = SymbolKind.Property; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/UnnamedFunctionDefinition.ts b/server/src/services/documentSymbol/visitors/UnnamedFunctionDefinition.ts index 54bdcfc5..0cbe948a 100644 --- a/server/src/services/documentSymbol/visitors/UnnamedFunctionDefinition.ts +++ b/server/src/services/documentSymbol/visitors/UnnamedFunctionDefinition.ts @@ -1,9 +1,12 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class UnnamedFunctionDefinition extends SymbolVisitor { public ruleKind = RuleKind.UnnamedFunctionDefinition; public symbolKind = SymbolKind.Function; - public nameTokenKind = TokenKind.FunctionKeyword; + public nameToken = [ + FieldName.FunctionKeyword, + TokenKind.FunctionKeyword, + ] as const; } diff --git a/server/src/services/documentSymbol/visitors/UserDefinedValueTypeDefinition.ts b/server/src/services/documentSymbol/visitors/UserDefinedValueTypeDefinition.ts index 7067bd18..fc25e15c 100644 --- a/server/src/services/documentSymbol/visitors/UserDefinedValueTypeDefinition.ts +++ b/server/src/services/documentSymbol/visitors/UserDefinedValueTypeDefinition.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class UserDefinedValueTypeDefinition extends SymbolVisitor { public ruleKind = RuleKind.UserDefinedValueTypeDefinition; public symbolKind = SymbolKind.TypeParameter; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/VariableDeclaration.ts b/server/src/services/documentSymbol/visitors/VariableDeclaration.ts index 464aefba..12e484d7 100644 --- a/server/src/services/documentSymbol/visitors/VariableDeclaration.ts +++ b/server/src/services/documentSymbol/visitors/VariableDeclaration.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class VariableDeclaration extends SymbolVisitor { public ruleKind = RuleKind.VariableDeclarationStatement; public symbolKind = SymbolKind.Variable; - public nameTokenKind = TokenKind.Identifier; + public nameToken = [FieldName.Name, TokenKind.Identifier] as const; } diff --git a/server/src/services/documentSymbol/visitors/YulFunctionDefinition.ts b/server/src/services/documentSymbol/visitors/YulFunctionDefinition.ts index e1565c83..e5870674 100644 --- a/server/src/services/documentSymbol/visitors/YulFunctionDefinition.ts +++ b/server/src/services/documentSymbol/visitors/YulFunctionDefinition.ts @@ -1,9 +1,9 @@ import { SymbolKind } from "vscode-languageserver-types"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { SymbolVisitor } from "../SymbolVisitor"; export class YulFunctionDefinition extends SymbolVisitor { public ruleKind = RuleKind.YulFunctionDefinition; public symbolKind = SymbolKind.Function; - public nameTokenKind = TokenKind.YulIdentifier; + public nameToken = [FieldName.Name, TokenKind.YulIdentifier] as const; } From 8983a3bcbc0e4bf79add88638a1c7ca01ac9cb94 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Wed, 21 Feb 2024 20:18:03 +0100 Subject: [PATCH 06/14] fix: Make sure the unsupported Solidity version is not truncated ...in Sentry. --- server/src/parser/slangHelpers.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/server/src/parser/slangHelpers.ts b/server/src/parser/slangHelpers.ts index 0d605171..79382c53 100644 --- a/server/src/parser/slangHelpers.ts +++ b/server/src/parser/slangHelpers.ts @@ -55,7 +55,9 @@ export function getLanguage(versionPragmas: string[]): Language { if (slangVersion === null) { throw new Error( - `No supported solidity version found. Supported versions: ${supportedVersions}, pragma directives: ${versionPragmas}` + `No Slang-supported version for Solidity found that satisfies the pragma directives: '${versionPragmas.join( + " " + )}'.` ); } return new Language(slangVersion); From 96f9262c8c241ec770323bc5afa26bf98b3a883f Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Wed, 21 Feb 2024 20:23:54 +0100 Subject: [PATCH 07/14] Also mention the latest supported version in the error message --- server/src/parser/slangHelpers.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/src/parser/slangHelpers.ts b/server/src/parser/slangHelpers.ts index 79382c53..3ba416b8 100644 --- a/server/src/parser/slangHelpers.ts +++ b/server/src/parser/slangHelpers.ts @@ -54,8 +54,9 @@ export function getLanguage(versionPragmas: string[]): Language { ); if (slangVersion === null) { + const latest = supportedVersions[supportedVersions.length - 1]; throw new Error( - `No Slang-supported version for Solidity found that satisfies the pragma directives: '${versionPragmas.join( + `No Slang-supported version (latest: ${latest}) for Solidity found that satisfies the pragma directives: '${versionPragmas.join( " " )}'.` ); From 075c73b1c7e9d0c37106f00e878971d725ee801d Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Thu, 22 Feb 2024 15:04:02 +0100 Subject: [PATCH 08/14] chore: Pin Slang version used by the server --- package-lock.json | 4 ++-- server/package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 762fe710..bbf64038 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12033,7 +12033,7 @@ "version": "0.7.2", "license": "MIT", "dependencies": { - "@nomicfoundation/slang": "^0.13.1", + "@nomicfoundation/slang": "0.13.1", "@nomicfoundation/solidity-analyzer": "0.1.1" }, "bin": { @@ -14958,7 +14958,7 @@ "version": "file:server", "requires": { "@istanbuljs/nyc-config-typescript": "1.0.2", - "@nomicfoundation/slang": "^0.13.1", + "@nomicfoundation/slang": "0.13.1", "@nomicfoundation/solidity-analyzer": "0.1.1", "@sentry/node": "7.32.1", "@sentry/tracing": "7.32.1", diff --git a/server/package.json b/server/package.json index 9a61e103..a633c79e 100644 --- a/server/package.json +++ b/server/package.json @@ -87,7 +87,7 @@ "yaml": "^2.2.1" }, "dependencies": { - "@nomicfoundation/slang": "^0.13.1", + "@nomicfoundation/slang": "0.13.1", "@nomicfoundation/solidity-analyzer": "0.1.1" } } From fa7522d35b71bf230b63ebcea910b2818e214b41 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Thu, 22 Feb 2024 15:25:00 +0100 Subject: [PATCH 09/14] refactor: Use the actual Slang version when packaging --- client/scripts/bundle.js | 55 +++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/client/scripts/bundle.js b/client/scripts/bundle.js index 4a661fab..b3015fb3 100755 --- a/client/scripts/bundle.js +++ b/client/scripts/bundle.js @@ -182,39 +182,48 @@ async function main() { process.exit(1); } + console.log("> Fetching external server dependencies...") + const serverPackageJson = require(path.join("../server", "package.json")); + const serverDeps = serverPackageJson?.dependencies; + if (!serverDeps) { + console.error("Error: Could not find server dependencies"); + process.exit(1); + } + const solidityAnalyzerVersion = serverDeps["@nomicfoundation/solidity-analyzer"]; + const slangVersion = serverDeps["@nomicfoundation/slang"]; + fs.writeFileSync( path.join(serverDir, "package.json"), JSON.stringify({ name: "tmp", version: "0.0.1", dependencies: { - "@nomicfoundation/solidity-analyzer": "0.1.1", - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", - - "@nomicfoundation/slang": "0.13.1", - "@nomicfoundation/slang-darwin-arm64": "0.13.1", - "@nomicfoundation/slang-win32-arm64-msvc": "0.13.1", - "@nomicfoundation/slang-linux-arm64-gnu": "0.13.1", - "@nomicfoundation/slang-linux-arm64-musl": "0.13.1", - "@nomicfoundation/slang-win32-ia32-msvc": "0.13.1", - "@nomicfoundation/slang-darwin-x64": "0.13.1", - "@nomicfoundation/slang-win32-x64-msvc": "0.13.1", - "@nomicfoundation/slang-linux-x64-gnu": "0.13.1", - "@nomicfoundation/slang-linux-x64-musl": "0.13.1", + "@nomicfoundation/solidity-analyzer": solidityAnalyzerVersion, + "@nomicfoundation/solidity-analyzer-darwin-arm64": solidityAnalyzerVersion, + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": solidityAnalyzerVersion, + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": solidityAnalyzerVersion, + "@nomicfoundation/solidity-analyzer-linux-arm64-musl": solidityAnalyzerVersion, + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": solidityAnalyzerVersion, + "@nomicfoundation/solidity-analyzer-darwin-x64": solidityAnalyzerVersion, + "@nomicfoundation/solidity-analyzer-win32-x64-msvc": solidityAnalyzerVersion, + "@nomicfoundation/solidity-analyzer-linux-x64-gnu": solidityAnalyzerVersion, + "@nomicfoundation/solidity-analyzer-linux-x64-musl": solidityAnalyzerVersion, + "@nomicfoundation/solidity-analyzer-freebsd-x64": solidityAnalyzerVersion, + + "@nomicfoundation/slang": slangVersion, + "@nomicfoundation/slang-darwin-arm64": slangVersion, + "@nomicfoundation/slang-win32-arm64-msvc": slangVersion, + "@nomicfoundation/slang-linux-arm64-gnu": slangVersion, + "@nomicfoundation/slang-linux-arm64-musl": slangVersion, + "@nomicfoundation/slang-win32-ia32-msvc": slangVersion, + "@nomicfoundation/slang-darwin-x64": slangVersion, + "@nomicfoundation/slang-win32-x64-msvc": slangVersion, + "@nomicfoundation/slang-linux-x64-gnu": slangVersion, + "@nomicfoundation/slang-linux-x64-musl": slangVersion, }, }) ); - console.log("> Fetching external server dependencies...") await new Promise((resolve) => { exec( "npm install --force", From 27a8ccdac7c1ff69c2ff9269681a8fbc1477f9b2 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Thu, 22 Feb 2024 15:39:14 +0100 Subject: [PATCH 10/14] fix: Better read and parse the server package.json --- client/scripts/bundle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/scripts/bundle.js b/client/scripts/bundle.js index b3015fb3..e12b45ea 100755 --- a/client/scripts/bundle.js +++ b/client/scripts/bundle.js @@ -183,7 +183,7 @@ async function main() { } console.log("> Fetching external server dependencies...") - const serverPackageJson = require(path.join("../server", "package.json")); + const serverPackageJson = JSON.parse(fs.readFileSync(path.join("..", "server", "package.json"), "utf8")); const serverDeps = serverPackageJson?.dependencies; if (!serverDeps) { console.error("Error: Could not find server dependencies"); From 9f279fd80fc66a049308cb83c7b380372a2f343c Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Thu, 22 Feb 2024 15:41:46 +0100 Subject: [PATCH 11/14] refactor: Reduce nesting in SymbolVisitor --- .../services/documentSymbol/SymbolVisitor.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/server/src/services/documentSymbol/SymbolVisitor.ts b/server/src/services/documentSymbol/SymbolVisitor.ts index 420be5bb..2f12b9f1 100644 --- a/server/src/services/documentSymbol/SymbolVisitor.ts +++ b/server/src/services/documentSymbol/SymbolVisitor.ts @@ -29,16 +29,15 @@ export abstract class SymbolVisitor { const childCursor = cursor.spawn(); while (childCursor.goToNextTokenWithKind(this.nameToken[1])) { - if (childCursor.nodeName === this.nameToken[0]) { - const nameToken = childCursor.node() as TokenNode; - - symbolName = nameToken.text; - selectionRange = slangToVSCodeRange( - this.document, - childCursor.textRange - ); - break; + if (childCursor.nodeName !== this.nameToken[0]) { + continue; } + + const nameToken = childCursor.node() as TokenNode; + + symbolName = nameToken.text; + selectionRange = slangToVSCodeRange(this.document, childCursor.textRange); + break; } let lastOpenSymbol; From afa69316dd60b1e4a85d3fa9b221486a8d81e69b Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Thu, 22 Feb 2024 15:43:17 +0100 Subject: [PATCH 12/14] chore: Drop the accidental " copy" suffix from a file --- ...ter copy.ts => UserDefinedValueTypeDefinitionHighlighter.ts} | 0 server/src/services/semanticHighlight/onSemanticTokensFull.ts | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename server/src/services/semanticHighlight/highlighters/{UserDefinedValueTypeDefinitionHighlighter copy.ts => UserDefinedValueTypeDefinitionHighlighter.ts} (100%) diff --git a/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter copy.ts b/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter.ts similarity index 100% rename from server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter copy.ts rename to server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter.ts diff --git a/server/src/services/semanticHighlight/onSemanticTokensFull.ts b/server/src/services/semanticHighlight/onSemanticTokensFull.ts index 750bc0a7..131b697d 100644 --- a/server/src/services/semanticHighlight/onSemanticTokensFull.ts +++ b/server/src/services/semanticHighlight/onSemanticTokensFull.ts @@ -21,7 +21,7 @@ import { ContractDefinitionHighlighter } from "./highlighters/ContractDefinition import { InterfaceDefinitionHighlighter } from "./highlighters/InterfaceDefinitionHighlighter"; import { StructDefinitionHighlighter } from "./highlighters/StructDefinitionHighlighter"; import { HighlightVisitor } from "./HighlightVisitor"; -import { UserDefinedValueTypeDefinitionHighlighter } from "./highlighters/UserDefinedValueTypeDefinitionHighlighter copy"; +import { UserDefinedValueTypeDefinitionHighlighter } from "./highlighters/UserDefinedValueTypeDefinitionHighlighter"; import { EnumDefinitionHighlighter } from "./highlighters/EnumDefinitionHighlighter"; import { ErrorDefinitionHighlighter } from "./highlighters/ErrorDefinitionHighlighter"; import { LibraryDefinitionHighlighter } from "./highlighters/LibraryDefinitionHighlighter"; From 798fbd11b5b8eb7fbd2b1591f09d564bb91e6230 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Thu, 22 Feb 2024 16:10:42 +0100 Subject: [PATCH 13/14] refactor: Use __dirname in client/scripts/bundle.js --- client/scripts/bundle.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/client/scripts/bundle.js b/client/scripts/bundle.js index e12b45ea..510f9235 100755 --- a/client/scripts/bundle.js +++ b/client/scripts/bundle.js @@ -111,7 +111,7 @@ async function main() { fs.copyFileSync(path.join(".", "LICENSE"), path.join(tmpDir, "LICENSE")); fs.copyFileSync( - path.join("..", "docs", "images", "vscode-logo.png"), + path.join(__dirname, "..", "..", "docs", "images", "vscode-logo.png"), path.join(imagesDir, "vscode-logo.png") ); @@ -183,7 +183,8 @@ async function main() { } console.log("> Fetching external server dependencies...") - const serverPackageJson = JSON.parse(fs.readFileSync(path.join("..", "server", "package.json"), "utf8")); + const serverPackageFile = path.join(__dirname, "..", "..", "server", "package.json"); + const serverPackageJson = JSON.parse(fs.readFileSync(serverPackageFile, "utf8")); const serverDeps = serverPackageJson?.dependencies; if (!serverDeps) { console.error("Error: Could not find server dependencies"); From 5be2bb25bb0dd48421780f415a23434eec4b2b92 Mon Sep 17 00:00:00 2001 From: Igor Matuszewski Date: Thu, 22 Feb 2024 16:38:08 +0100 Subject: [PATCH 14/14] refactor: Also select highlighted identifier by CST node name This aims to retain the existing behaviour. We should improve and enhance the behaviour but probably using queries instead, otherwise this will involve a bit of manual node selection and rules that can change fairly often. --- server/src/parser/slangHelpers.ts | 1 + .../highlighters/ContractDefinitionHighlighter.ts | 3 ++- .../semanticHighlight/highlighters/CustomTypeHighlighter.ts | 4 +++- .../highlighters/EnumDefinitionHighlighter.ts | 3 ++- .../highlighters/ErrorDefinitionHighlighter.ts | 3 ++- .../highlighters/EventDefinitionHighlighter.ts | 3 ++- .../highlighters/EventEmissionHighlighter.ts | 1 + .../semanticHighlight/highlighters/FunctionCallHighlighter.ts | 1 + .../highlighters/FunctionDefinitionHighlighter.ts | 4 +++- .../highlighters/InterfaceDefinitionHighlighter.ts | 3 ++- .../highlighters/LibraryDefinitionHighlighter.ts | 3 ++- .../highlighters/StructDefinitionHighlighter.ts | 3 ++- .../highlighters/UserDefinedValueTypeDefinitionHighlighter.ts | 3 ++- server/src/services/semanticHighlight/onSemanticTokensFull.ts | 1 + 14 files changed, 26 insertions(+), 10 deletions(-) diff --git a/server/src/parser/slangHelpers.ts b/server/src/parser/slangHelpers.ts index 3ba416b8..c5e7052f 100644 --- a/server/src/parser/slangHelpers.ts +++ b/server/src/parser/slangHelpers.ts @@ -16,6 +16,7 @@ export interface SlangNodeWrapper { type: NodeType; kind: NodeKind; text: string; + name: string; ancestors: () => SlangNode[]; } diff --git a/server/src/services/semanticHighlight/highlighters/ContractDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/ContractDefinitionHighlighter.ts index 3ce78bd9..7e3ed299 100644 --- a/server/src/services/semanticHighlight/highlighters/ContractDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/ContractDefinitionHighlighter.ts @@ -1,6 +1,6 @@ import { SemanticTokenTypes } from "vscode-languageserver-protocol"; import { NodeType } from "@nomicfoundation/slang/cst"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { HighlightVisitor } from "../HighlightVisitor"; import { SlangNodeWrapper } from "../../../parser/slangHelpers"; @@ -13,6 +13,7 @@ export class ContractDefinitionHighlighter extends HighlightVisitor { if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && + nodeWrapper.name === FieldName.Name && ancestors[ancestors.length - 1]?.kind === RuleKind.ContractDefinition ) { this.tokenBuilder.addToken(nodeWrapper, SemanticTokenTypes.type); diff --git a/server/src/services/semanticHighlight/highlighters/CustomTypeHighlighter.ts b/server/src/services/semanticHighlight/highlighters/CustomTypeHighlighter.ts index db425e54..05e87136 100644 --- a/server/src/services/semanticHighlight/highlighters/CustomTypeHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/CustomTypeHighlighter.ts @@ -1,6 +1,6 @@ import { SemanticTokenTypes } from "vscode-languageserver-protocol"; import { NodeType } from "@nomicfoundation/slang/cst"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { HighlightVisitor } from "../HighlightVisitor"; import { SlangNodeWrapper } from "../../../parser/slangHelpers"; @@ -13,6 +13,8 @@ export class CustomTypeHighlighter extends HighlightVisitor { if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && + // NOTE: This only supports highlighting the first identifier in the path + nodeWrapper.name === FieldName.Item && ancestors[ancestors.length - 2]?.kind === RuleKind.TypeName ) { this.tokenBuilder.addToken(nodeWrapper, SemanticTokenTypes.type); diff --git a/server/src/services/semanticHighlight/highlighters/EnumDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/EnumDefinitionHighlighter.ts index 64e42fcf..e262acaf 100644 --- a/server/src/services/semanticHighlight/highlighters/EnumDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/EnumDefinitionHighlighter.ts @@ -1,6 +1,6 @@ import { SemanticTokenTypes } from "vscode-languageserver-protocol"; import { NodeType } from "@nomicfoundation/slang/cst"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { HighlightVisitor } from "../HighlightVisitor"; import { SlangNodeWrapper } from "../../../parser/slangHelpers"; @@ -12,6 +12,7 @@ export class EnumDefinitionHighlighter extends HighlightVisitor { if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && + nodeWrapper.name === FieldName.Name && ancestors[ancestors.length - 1]?.kind === RuleKind.EnumDefinition ) { this.tokenBuilder.addToken(nodeWrapper, SemanticTokenTypes.type); diff --git a/server/src/services/semanticHighlight/highlighters/ErrorDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/ErrorDefinitionHighlighter.ts index c1827b69..b105e2dd 100644 --- a/server/src/services/semanticHighlight/highlighters/ErrorDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/ErrorDefinitionHighlighter.ts @@ -1,6 +1,6 @@ import { SemanticTokenTypes } from "vscode-languageserver-protocol"; import { NodeType } from "@nomicfoundation/slang/cst"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { HighlightVisitor } from "../HighlightVisitor"; import { SlangNodeWrapper } from "../../../parser/slangHelpers"; @@ -12,6 +12,7 @@ export class ErrorDefinitionHighlighter extends HighlightVisitor { if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && + nodeWrapper.name === FieldName.Name && ancestors[ancestors.length - 1]?.kind === RuleKind.ErrorDefinition ) { this.tokenBuilder.addToken(nodeWrapper, SemanticTokenTypes.type); diff --git a/server/src/services/semanticHighlight/highlighters/EventDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/EventDefinitionHighlighter.ts index 789e89db..37abc31e 100644 --- a/server/src/services/semanticHighlight/highlighters/EventDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/EventDefinitionHighlighter.ts @@ -1,6 +1,6 @@ import { SemanticTokenTypes } from "vscode-languageserver-protocol"; import { NodeType } from "@nomicfoundation/slang/cst"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { HighlightVisitor } from "../HighlightVisitor"; import { SlangNodeWrapper } from "../../../parser/slangHelpers"; @@ -13,6 +13,7 @@ export class EventDefinitionHighlighter extends HighlightVisitor { if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && + nodeWrapper.name === FieldName.Name && ancestors[ancestors.length - 1]?.kind === RuleKind.EventDefinition ) { this.tokenBuilder.addToken(nodeWrapper, SemanticTokenTypes.type); diff --git a/server/src/services/semanticHighlight/highlighters/EventEmissionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/EventEmissionHighlighter.ts index 2bffaac0..df6f1051 100644 --- a/server/src/services/semanticHighlight/highlighters/EventEmissionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/EventEmissionHighlighter.ts @@ -13,6 +13,7 @@ export class EventEmissionHighlighter extends HighlightVisitor { if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && + // NOTE: This only highlights the first identifier (in path) in the event emission statement ancestors[ancestors.length - 2]?.kind === RuleKind.EmitStatement ) { this.tokenBuilder.addToken(nodeWrapper, SemanticTokenTypes.type); diff --git a/server/src/services/semanticHighlight/highlighters/FunctionCallHighlighter.ts b/server/src/services/semanticHighlight/highlighters/FunctionCallHighlighter.ts index 3c24d7cb..f06cc451 100644 --- a/server/src/services/semanticHighlight/highlighters/FunctionCallHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/FunctionCallHighlighter.ts @@ -13,6 +13,7 @@ export class FunctionCallHighlighter extends HighlightVisitor { if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && + // NOTE: This only supports the basic case of a function call with positional arguments "(a,b,c)" ancestors[ancestors.length - 2]?.kind === RuleKind.FunctionCallExpression ) { this.tokenBuilder.addToken(nodeWrapper, SemanticTokenTypes.function); diff --git a/server/src/services/semanticHighlight/highlighters/FunctionDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/FunctionDefinitionHighlighter.ts index 6a19c40a..479cb1c3 100644 --- a/server/src/services/semanticHighlight/highlighters/FunctionDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/FunctionDefinitionHighlighter.ts @@ -1,6 +1,6 @@ import { SemanticTokenTypes } from "vscode-languageserver-protocol"; import { NodeType } from "@nomicfoundation/slang/cst"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { HighlightVisitor } from "../HighlightVisitor"; import { SlangNodeWrapper } from "../../../parser/slangHelpers"; @@ -13,6 +13,8 @@ export class FunctionDefinitionHighlighter extends HighlightVisitor { if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && + // TODO: Support also 'receive' and 'fallback' functions post 0.6.0 + nodeWrapper.name === FieldName.Variant && ancestors[ancestors.length - 2]?.kind === RuleKind.FunctionDefinition ) { this.tokenBuilder.addToken(nodeWrapper, SemanticTokenTypes.function); diff --git a/server/src/services/semanticHighlight/highlighters/InterfaceDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/InterfaceDefinitionHighlighter.ts index 352b047c..2c679f69 100644 --- a/server/src/services/semanticHighlight/highlighters/InterfaceDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/InterfaceDefinitionHighlighter.ts @@ -1,6 +1,6 @@ import { SemanticTokenTypes } from "vscode-languageserver-protocol"; import { NodeType } from "@nomicfoundation/slang/cst"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { HighlightVisitor } from "../HighlightVisitor"; import { SlangNodeWrapper } from "../../../parser/slangHelpers"; @@ -13,6 +13,7 @@ export class InterfaceDefinitionHighlighter extends HighlightVisitor { if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && + nodeWrapper.name === FieldName.Name && ancestors[ancestors.length - 1]?.kind === RuleKind.InterfaceDefinition ) { this.tokenBuilder.addToken(nodeWrapper, SemanticTokenTypes.type); diff --git a/server/src/services/semanticHighlight/highlighters/LibraryDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/LibraryDefinitionHighlighter.ts index 528a0b0d..2d05b266 100644 --- a/server/src/services/semanticHighlight/highlighters/LibraryDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/LibraryDefinitionHighlighter.ts @@ -1,6 +1,6 @@ import { SemanticTokenTypes } from "vscode-languageserver-protocol"; import { NodeType } from "@nomicfoundation/slang/cst"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { HighlightVisitor } from "../HighlightVisitor"; import { SlangNodeWrapper } from "../../../parser/slangHelpers"; @@ -12,6 +12,7 @@ export class LibraryDefinitionHighlighter extends HighlightVisitor { if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && + nodeWrapper.name === FieldName.Name && ancestors[ancestors.length - 1]?.kind === RuleKind.LibraryDefinition ) { this.tokenBuilder.addToken(nodeWrapper, SemanticTokenTypes.type); diff --git a/server/src/services/semanticHighlight/highlighters/StructDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/StructDefinitionHighlighter.ts index f2cf492a..ba935492 100644 --- a/server/src/services/semanticHighlight/highlighters/StructDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/StructDefinitionHighlighter.ts @@ -1,6 +1,6 @@ import { SemanticTokenTypes } from "vscode-languageserver-protocol"; import { NodeType } from "@nomicfoundation/slang/cst"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { HighlightVisitor } from "../HighlightVisitor"; import { SlangNodeWrapper } from "../../../parser/slangHelpers"; @@ -13,6 +13,7 @@ export class StructDefinitionHighlighter extends HighlightVisitor { if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && + nodeWrapper.name === FieldName.Name && ancestors[ancestors.length - 1]?.kind === RuleKind.StructDefinition ) { this.tokenBuilder.addToken(nodeWrapper, SemanticTokenTypes.type); diff --git a/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter.ts b/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter.ts index 9e827334..a56de0c3 100644 --- a/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter.ts +++ b/server/src/services/semanticHighlight/highlighters/UserDefinedValueTypeDefinitionHighlighter.ts @@ -1,6 +1,6 @@ import { SemanticTokenTypes } from "vscode-languageserver-protocol"; import { NodeType } from "@nomicfoundation/slang/cst"; -import { RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; +import { FieldName, RuleKind, TokenKind } from "@nomicfoundation/slang/kinds"; import { HighlightVisitor } from "../HighlightVisitor"; import { SlangNodeWrapper } from "../../../parser/slangHelpers"; @@ -12,6 +12,7 @@ export class UserDefinedValueTypeDefinitionHighlighter extends HighlightVisitor if ( nodeWrapper.type === NodeType.Token && nodeWrapper.kind === TokenKind.Identifier && + nodeWrapper.name === FieldName.Name && ancestors[ancestors.length - 1]?.kind === RuleKind.UserDefinedValueTypeDefinition ) { diff --git a/server/src/services/semanticHighlight/onSemanticTokensFull.ts b/server/src/services/semanticHighlight/onSemanticTokensFull.ts index 131b697d..c93c136b 100644 --- a/server/src/services/semanticHighlight/onSemanticTokensFull.ts +++ b/server/src/services/semanticHighlight/onSemanticTokensFull.ts @@ -111,6 +111,7 @@ export function onSemanticTokensFull(serverState: ServerState) { ancestors: () => cursor.ancestors(), text: node.text, textRange: cursor.textRange, + name: cursor.nodeName, type: node.type, };