├── .circleci └── config.yml ├── .github └── CODEOWNERS ├── .gitignore ├── README.md ├── stardog-rdf-grammars ├── .vscode │ ├── launch.json │ └── settings.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── language-configuration.json ├── package.json ├── static │ └── ttl-syntax.png ├── syntaxes │ ├── shacl.tmLanguage.json │ ├── sparql.tmLanguage.json │ ├── stardog-mapping.tmLanguage.json │ ├── stardog-rules.tmLanguage.json │ ├── trig.tmLanguage.json │ └── turtle.tmLanguage.json └── test │ ├── test.rq │ ├── test.shacl │ ├── test.sms │ ├── test.srs │ ├── test.trig │ └── test.ttl ├── vscode-langserver-shacl ├── CHANGELOG.md ├── LICENSE ├── README.md ├── fixtures │ └── bad │ │ ├── basic-bad-shacl.shacl │ │ └── basic-incomplete-shacl.shacl ├── out │ ├── extension.js │ ├── extension.js.map │ └── test │ │ ├── extension.test.js │ │ ├── extension.test.js.map │ │ ├── index.js │ │ ├── index.js.map │ │ ├── runTest.js │ │ └── runTest.js.map ├── package.json ├── src │ ├── extension.ts │ └── test │ │ ├── extension.test.ts │ │ ├── index.ts │ │ └── runTest.ts ├── tsconfig.json ├── tslint.json └── yarn.lock ├── vscode-langserver-sms ├── .vscode │ ├── extensions.json │ ├── launch.json │ ├── settings.json │ └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── fixtures │ ├── bad │ │ └── expect-json-sql-graphql.sms │ └── good │ │ ├── empty-mapping.sms │ │ └── minimal-mapping.sms ├── out │ ├── extension.js │ ├── extension.js.map │ └── test │ │ ├── extension.test.js │ │ ├── extension.test.js.map │ │ ├── index.js │ │ ├── index.js.map │ │ ├── runTest.js │ │ └── runTest.js.map ├── package.json ├── src │ ├── extension.ts │ └── test │ │ ├── extension.test.ts │ │ ├── index.ts │ │ └── runTest.ts ├── tsconfig.json ├── tslint.json └── yarn.lock ├── vscode-langserver-sparql ├── .vscode │ ├── extensions.json │ ├── launch.json │ ├── settings.json │ └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── fixtures │ └── bad │ │ └── basic-bad-select.sparql ├── out │ ├── extension.js │ ├── extension.js.map │ └── test │ │ ├── extension.test.js │ │ ├── extension.test.js.map │ │ ├── index.js │ │ └── index.js.map ├── package.json ├── src │ ├── extension.ts │ └── test │ │ ├── extension.test.ts │ │ ├── index.ts │ │ └── runTest.ts ├── tsconfig.json ├── tslint.json └── yarn.lock ├── vscode-langserver-stardog-graphql ├── CHANGELOG.md ├── LICENSE ├── README.md ├── fixtures │ ├── bad │ │ └── basic-bad-graphql.graphql │ └── good │ │ └── basic-good-graphql.graphql ├── language-configuration.json ├── out │ ├── extension.js │ ├── extension.js.map │ └── test │ │ ├── extension.test.js │ │ ├── extension.test.js.map │ │ ├── index.js │ │ ├── index.js.map │ │ ├── runTest.js │ │ └── runTest.js.map ├── package.json ├── src │ ├── extension.ts │ └── test │ │ ├── extension.test.ts │ │ ├── index.ts │ │ └── runTest.ts ├── stardog-graphql.tmLanguage.json ├── tsconfig.json ├── tslint.json └── yarn.lock ├── vscode-langserver-trig ├── CHANGELOG.md ├── LICENSE ├── README.md ├── fixtures │ └── bad │ │ └── basic-bad-trig.trig ├── out │ ├── extension.js │ ├── extension.js.map │ └── test │ │ ├── extension.test.js │ │ ├── extension.test.js.map │ │ ├── index.js │ │ └── index.js.map ├── package.json ├── src │ ├── extension.ts │ └── test │ │ ├── extension.test.ts │ │ ├── index.ts │ │ └── runTest.ts ├── tsconfig.json ├── tslint.json └── yarn.lock ├── vscode-langserver-turtle ├── .vscode │ ├── extensions.json │ ├── launch.json │ ├── settings.json │ └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── fixtures │ └── bad │ │ └── basic-bad-turtle.ttl ├── out │ ├── extension.js │ ├── extension.js.map │ └── test │ │ ├── extension.test.js │ │ ├── extension.test.js.map │ │ ├── index.js │ │ ├── index.js.map │ │ ├── runTest.js │ │ └── runTest.js.map ├── package.json ├── src │ ├── extension.ts │ └── test │ │ ├── extension.test.ts │ │ ├── index.ts │ │ └── runTest.ts ├── tsconfig.json ├── tslint.json └── yarn.lock └── vscode-stardog-languages ├── .gitattributes ├── .gitignore ├── .vscode └── launch.json ├── .vscodeignore ├── CHANGELOG.md ├── LICENSE ├── README.md └── package.json /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | references: 3 | working_directory: &working_directory ~/stardog-vsc 4 | jobs: 5 | build: 6 | docker: 7 | - image: circleci/node:14.17.1-stretch-browsers 8 | working_directory: *working_directory 9 | steps: 10 | - checkout 11 | # Concatenate lockfiles for caching; this is Circle's recommended strategy here: https://circleci.com/docs/2.0/caching/#restoring-cache 12 | - run: 13 | name: Concatenate yarn.lock files 14 | command: ls -d */ | grep langserver | awk -F . '{printf "\"%syarn.lock\" ", $1}' | xargs cat > concatenated-yarn.lock 15 | - restore_cache: 16 | # This caching strategy isn't ideal, but CircleCI's current support for monorepos is poor, and this works well enough 17 | keys: 18 | # This branch if available 19 | - dependency-cache-{{ .Environment.CACHE_VERSION }}-{{ .Branch }}-{{ checksum "concatenated-yarn.lock" }}-{{ checksum "./stardog-rdf-grammars/package.json" }}-{{ checksum "./vscode-stardog-languages/package.json" }} 20 | # Default branch if not 21 | - dependency-cache-{{ .Environment.CACHE_VERSION }}-develop-{{ checksum "concatenated-yarn.lock" }}-{{ checksum "./stardog-rdf-grammars/package.json" }}-{{ checksum "./vscode-stardog-languages/package.json" }} 22 | - run: 23 | name: Install Node Modules 24 | command: | 25 | cd ~/stardog-vsc/vscode-langserver-shacl && yarn 26 | cd ~/stardog-vsc/vscode-langserver-sms && yarn 27 | cd ~/stardog-vsc/vscode-langserver-sparql && yarn 28 | cd ~/stardog-vsc/vscode-langserver-stardog-graphql && yarn 29 | cd ~/stardog-vsc/vscode-langserver-trig && yarn 30 | cd ~/stardog-vsc/vscode-langserver-turtle && yarn 31 | - save_cache: 32 | key: dependency-cache-{{ .Environment.CACHE_VERSION }}-{{ .Branch }}-{{ checksum "concatenated-yarn.lock" }}-{{ checksum "./stardog-rdf-grammars/package.json" }}-{{ checksum "./vscode-stardog-languages/package.json" }} 33 | paths: 34 | - ./vscode-langserver-shacl/node_modules 35 | - ./vscode-langserver-sms/node_modules 36 | - ./vscode-langserver-sparql/node_modules 37 | - ./vscode-langserver-stardog-graphql/node_modules 38 | - ./vscode-langserver-trig/node_modules 39 | - ./vscode-langserver-turtle/node_modules 40 | - persist_to_workspace: 41 | root: . 42 | paths: 43 | - ./ 44 | 45 | test: 46 | docker: 47 | - image: circleci/node:14.17.1-stretch-browsers 48 | working_directory: *working_directory 49 | steps: 50 | - attach_workspace: 51 | at: . 52 | - run: 53 | name: Tests 54 | command: | 55 | cp -R ~/stardog-vsc/stardog-rdf-grammars ~/stardog-vsc/stardog-union.stardog-rdf-grammars 56 | cd ~/stardog-vsc/vscode-langserver-shacl && yarn run test 57 | cd ~/stardog-vsc/vscode-langserver-sms && yarn run test 58 | cd ~/stardog-vsc/vscode-langserver-sparql && yarn run test 59 | cd ~/stardog-vsc/vscode-langserver-stardog-graphql && yarn run test 60 | cd ~/stardog-vsc/vscode-langserver-trig && yarn run test 61 | cd ~/stardog-vsc/vscode-langserver-turtle && yarn run test 62 | 63 | workflows: 64 | version: 2 65 | build_and_test: 66 | jobs: 67 | - build 68 | - test: 69 | requires: 70 | - build 71 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @anneeb @joshhk72 @SpiralP @mysticfalconvt 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | **/.vscode-test/** 3 | 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Stardog VSC 2 | 3 | Plugins and extensions for Microsoft Visual Studio Code 4 | 5 | -------------------------------------------------------------------------------- /stardog-rdf-grammars/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | { 3 | "version": "0.1.0", 4 | "configurations": [ 5 | { 6 | "name": "Launch Extension", 7 | "type": "extensionHost", 8 | "request": "launch", 9 | "runtimeExecutable": "${execPath}", 10 | "args": ["--extensionDevelopmentPath=${workspaceRoot}"], 11 | "stopOnEntry": false 12 | }, 13 | { 14 | "name": "Launch Tests", 15 | "type": "extensionHost", 16 | "request": "launch", 17 | "runtimeExecutable": "${execPath}", 18 | "args": ["--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/test" ], 19 | "stopOnEntry": false 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /stardog-rdf-grammars/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "vsicons.presets.angular": false 3 | } -------------------------------------------------------------------------------- /stardog-rdf-grammars/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "stardog-rdf-grammars" extension will be documented in this file. 4 | 5 | ## [0.2.1] 6 | 7 | - Add support for additional file extensions 8 | 9 | ## [0.1.2] 10 | 11 | - Update highlighting for new grammars 12 | 13 | ## [0.1.0] 14 | 15 | - Add some additional grammars 16 | 17 | ## [0.0.7] 18 | 19 | - Cleanup (package.json category change, start using the CHANGELOG, etc.) 20 | -------------------------------------------------------------------------------- /stardog-rdf-grammars/LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | https://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | Copyright 2017 Stardog Union. 180 | 181 | Licensed under the Apache License, Version 2.0 (the "License"); 182 | you may not use this file except in compliance with the License. 183 | You may obtain a copy of the License at 184 | 185 | https://www.apache.org/licenses/LICENSE-2.0 186 | 187 | Unless required by applicable law or agreed to in writing, software 188 | distributed under the License is distributed on an "AS IS" BASIS, 189 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 190 | See the License for the specific language governing permissions and 191 | limitations under the License. 192 | -------------------------------------------------------------------------------- /stardog-rdf-grammars/README.md: -------------------------------------------------------------------------------- 1 | # Stardog RDF Grammars 2 | 3 | Visual Studio Code syntax highlighting for all your favorite RDF languages, and a few [Stardog](https://www.stardog.com/)-specific ones, too! 4 | 5 | ![Turtle syntax highlighting](https://github.com/stardog-union/stardog-vsc/raw/master/stardog-rdf-grammars/static/ttl-syntax.png) 6 | 7 | ### RDF language support: 8 | 9 | - SPARQL (`.rq`) 10 | - Turtle (`.ttl`) 11 | - Trig (`.trig`) 12 | - SHACL (`.shacl`) 13 | 14 | ### Stardog language support: 15 | 16 | - Stardog Mapping Syntax 2 (`.sms`, `.sms2`) 17 | - Stardog Rules Syntax (`.srs`) 18 | 19 | ## Installation 20 | 21 | There are two ways to install this extension: from the Visual Studio Code Extension Marketplace (recommended) and locally. 22 | 23 | ### Marketplace 24 | 25 | To install via the Marketplace open the command palette while in VSC (`CMD + SHIFT + P`) and type `install`, then navigate to `Extensions: Install Extensions` and hit `enter`, or simply click the Marketplace icon and search for this extension `stardog-rdf-grammars`. 26 | 27 | ### Local 28 | 29 | To install the extension locally you'll need to copy this project into VSCode's dotfile folder (usually located in your `$HOME` directory): 30 | 31 | ``` 32 | cp path/to/stardog-rdf-grammars $HOME/.vscode/extensions 33 | ``` 34 | 35 | Make sure you have VSCode installed first! Once you've copied this directory to `.vscode/extensions`, either restart VSCode or reload the window (`CMD+SHIFT+P`, then type `reload` - you'll see the appropriate option). 36 | 37 | ## Usage 38 | 39 | Open a file with an extension that matches your language, et voila! 40 | 41 | ## License 42 | 43 | [Apache 2.0](https://github.com/stardog-union/stardog-vsc/raw/master/stardog-rdf-grammars/LICENSE) 44 | -------------------------------------------------------------------------------- /stardog-rdf-grammars/language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | // symbol used for single line comment. Remove this entry if your language does not support line comments 4 | "lineComment": "#" 5 | }, 6 | // symbols used as brackets 7 | "brackets": [["{", "}"], ["[", "]"], ["(", ")"]], 8 | // symbols that are auto closed when typing 9 | "autoClosingPairs": [["{", "}"], ["[", "]"], ["(", ")"], ["\"", "\""], ["'", "'"]], 10 | // symbols that that can be used to surround a selection 11 | "surroundingPairs": [["{", "}"], ["[", "]"], ["(", ")"], ["\"", "\""], ["'", "'"]], 12 | "folding": { 13 | "markers": { 14 | "start": "^\\s*#\\s?region\\b", 15 | "end": "^\\s*#\\s?endregion\\b" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /stardog-rdf-grammars/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stardog-rdf-grammars", 3 | "publisher": "stardog-union", 4 | "displayName": "Stardog RDF Grammars", 5 | "description": "Syntax highlighting for SPARQL, Turtle, Stardog Rules Syntax, and other RDF languages", 6 | "version": "0.2.1", 7 | "license": "Apache-2.0", 8 | "contributors": [ 9 | { 10 | "name": "Adam Bretz", 11 | "email": "arbretz@gmail.com" 12 | }, 13 | { 14 | "name": "Mark Ellis", 15 | "email": "ellismarkf@gmail.com" 16 | }, 17 | { 18 | "name": "Jason Rogers", 19 | "email": "jason@stardog.com" 20 | } 21 | ], 22 | "repository": { 23 | "type": "git", 24 | "url": "git+https://github.com/stardog-union/stardog-vsc.git" 25 | }, 26 | "bugs": { 27 | "url": "https://github.com/stardog-union/stardog-vsc/issues" 28 | }, 29 | "homepage": "https://github.com/stardog-union/stardog-vsc/stardog-rdf-grammars/#readme", 30 | "engines": { 31 | "vscode": "^1.5.0" 32 | }, 33 | "categories": [ 34 | "Programming Languages" 35 | ], 36 | "contributes": { 37 | "languages": [ 38 | { 39 | "id": "sparql", 40 | "aliases": [ 41 | "SPARQL", 42 | "sparql" 43 | ], 44 | "extensions": [ 45 | ".rq", 46 | ".sparql", 47 | ".sq" 48 | ], 49 | "configuration": "./language-configuration.json" 50 | }, 51 | { 52 | "id": "turtle", 53 | "aliases": [ 54 | "TURTLE", 55 | "turtle" 56 | ], 57 | "extensions": [ 58 | ".ttl", 59 | ".turtle", 60 | ".acl" 61 | ], 62 | "configuration": "./language-configuration.json" 63 | }, 64 | { 65 | "id": "stardog-mapping-syntax", 66 | "aliases": [ 67 | "SMS", 68 | "SMS2", 69 | "sms", 70 | "sms2", 71 | "Stardog Mapping Syntax", 72 | "Stardog Mapping Syntax 2" 73 | ], 74 | "extensions": [ 75 | ".sms", 76 | ".sms2" 77 | ], 78 | "configuration": "./language-configuration.json" 79 | }, 80 | { 81 | "id": "stardog-rules-syntax", 82 | "aliases": [ 83 | "SRS", 84 | "srs", 85 | "Stardog Rules Syntax" 86 | ], 87 | "extensions": [ 88 | ".srs" 89 | ], 90 | "configuration": "./language-configuration.json" 91 | }, 92 | { 93 | "id": "shacl", 94 | "aliases": [ 95 | "SHACL", 96 | "shacl", 97 | "Shapes Constraint Language" 98 | ], 99 | "extensions": [ 100 | ".shacl" 101 | ], 102 | "configuration": "./language-configuration.json" 103 | }, 104 | { 105 | "id": "trig", 106 | "aliases": [ 107 | "TriG", 108 | "trig" 109 | ], 110 | "extensions": [ 111 | ".trig" 112 | ], 113 | "configuration": "./language-configuration.json" 114 | } 115 | ], 116 | "grammars": [ 117 | { 118 | "language": "sparql", 119 | "scopeName": "source.sparql", 120 | "path": "./syntaxes/sparql.tmLanguage.json" 121 | }, 122 | { 123 | "language": "turtle", 124 | "scopeName": "source.turtle", 125 | "path": "./syntaxes/turtle.tmLanguage.json" 126 | }, 127 | { 128 | "language": "stardog-mapping-syntax", 129 | "scopeName": "source.sms", 130 | "path": "./syntaxes/stardog-mapping.tmLanguage.json" 131 | }, 132 | { 133 | "language": "stardog-rules-syntax", 134 | "scopeName": "source.srs", 135 | "path": "./syntaxes/stardog-rules.tmLanguage.json" 136 | }, 137 | { 138 | "language": "shacl", 139 | "scopeName": "source.shacl", 140 | "path": "./syntaxes/shacl.tmLanguage.json" 141 | }, 142 | { 143 | "language": "trig", 144 | "scopeName": "source.trig", 145 | "path": "./syntaxes/trig.tmLanguage.json" 146 | } 147 | ] 148 | } 149 | } 150 | -------------------------------------------------------------------------------- /stardog-rdf-grammars/static/ttl-syntax.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stardog-union/stardog-vsc/640e961abcf7bd46cee4871b71dd0d1586d414da/stardog-rdf-grammars/static/ttl-syntax.png -------------------------------------------------------------------------------- /stardog-rdf-grammars/syntaxes/shacl.tmLanguage.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SHACL", 3 | "scopeName": "source.shacl", 4 | "fileTypes": [ 5 | "shacl" 6 | ], 7 | "patterns": [ 8 | { "include": "source.turtle" } 9 | ] 10 | } -------------------------------------------------------------------------------- /stardog-rdf-grammars/syntaxes/sparql.tmLanguage.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "SPARQL", 3 | "scopeName": "source.sparql", 4 | "fileTypes": [ 5 | "rq", 6 | "sparql", 7 | "sq" 8 | ], 9 | "patterns": [ 10 | { "include": "source.turtle" }, 11 | { "include": "#query-keyword-operators" }, 12 | { "include": "#functions" }, 13 | { "include": "#variables" }, 14 | { "include": "#expression-operators" } 15 | ], 16 | "repository": { 17 | "query-keyword-operators": { 18 | "name": "keyword.control.sparql", 19 | "match": "\\b(?i:define|select|distinct|reduced|from|named|construct|ask|describe|where|graph|having|bind|as|filter|optional|union|order|by|group|limit|offset|values|insert data|delete data|with|delete|insert|clear|silent|default|all|create|drop|copy|move|add|to|using|service|not exists|exists|not in|in|minus|load)\\b" 20 | }, 21 | "functions": { 22 | "name": "support.function.sparql", 23 | "match": "\\b(?i:concat|regex|asc|desc|bound|isiri|isuri|isblank|isliteral|isnumeric|str|lang|datatype|sameterm|langmatches|avg|count|group_concat|separator|max|min|sample|sum|iri|uri|bnode|strdt|uuid|struuid|strlang|strlen|substr|ucase|lcase|strstarts|strends|contains|strbefore|strafter|encode_for_uri|replace|abs|round|ceil|floor|rand|now|year|month|day|hours|minutes|seconds|timezone|tz|md5|sha1|sha256|sha384|sha512|coalesce|if)\\b" 24 | }, 25 | "variables": { 26 | "name": "constant.variable.sparql.turtle", 27 | "match": "(?|<=|>=|\\*|\/|\\+|-|\\||\\^|\\?|\\!)" 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /stardog-rdf-grammars/syntaxes/stardog-mapping.tmLanguage.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Stardog Mapping Syntax", 3 | "scopeName": "source.sms", 4 | "fileTypes": [ 5 | "sms" 6 | ], 7 | "patterns": [ 8 | { "include": "source.turtle" } 9 | ], 10 | "uuid": "92374892374-234d-d87520935" 11 | } -------------------------------------------------------------------------------- /stardog-rdf-grammars/syntaxes/stardog-rules.tmLanguage.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Stardog Rules Syntax", 3 | "scopeName": "source.srs", 4 | "fileTypes": [ 5 | "srs" 6 | ], 7 | "patterns": [ 8 | { "include": "#rules-operators" }, 9 | { "include": "source.sparql" } 10 | ], 11 | "repository": { 12 | "rules-operators": { 13 | "name": "keyword.control.srs", 14 | "match": "\\b(?i:if|then)\\b" 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /stardog-rdf-grammars/syntaxes/trig.tmLanguage.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "TriG", 3 | "scopeName": "source.trig", 4 | "fileTypes": [ 5 | "trig" 6 | ], 7 | "patterns": [ 8 | { "include": "source.turtle" } 9 | ] 10 | } -------------------------------------------------------------------------------- /stardog-rdf-grammars/syntaxes/turtle.tmLanguage.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Turtle", 3 | "scopeName": "source.turtle", 4 | "fileTypes": [ 5 | "turtle", 6 | "ttl", 7 | "acl" 8 | ], 9 | "patterns": [ 10 | { "include": "#rule-constraint" }, 11 | { "include": "#iriref" }, 12 | { "include": "#prefix" }, 13 | { "include": "#prefixed-name" }, 14 | { "include": "#comment" }, 15 | { "include": "#special-predicate" }, 16 | { "include": "#literals" }, 17 | { "include": "#language-tag" } 18 | ], 19 | "uuid": "230498230498sdfkj8909-34df-23dfs", 20 | "repository": { 21 | "prefix": { 22 | "name": "keyword.operator.turtle", 23 | "match": "(?i:@?base|@?prefix)\\s" 24 | }, 25 | "iriref": { 26 | "name": "entity.name.type.iriref.turtle", 27 | "match": "<[^\\x20-\\x20<>\"{}|^`\\\\]*>" 28 | }, 29 | "prefixed-name": { 30 | "name": "constant.complex.turtle", 31 | "match": "(\\w*:)(\\w*)", 32 | "captures": { 33 | "1": { 34 | "name": "storage.type.PNAME_NS.turtle" 35 | }, 36 | "2": { 37 | "name": "support.variable.PN_LOCAL.turtle" 38 | } 39 | } 40 | }, 41 | "comment": { 42 | "name": "comment.line.number-sign.turtle", 43 | "match": "#.*$" 44 | }, 45 | "special-predicate": { 46 | "name": "meta.specialPredicate.turtle", 47 | "match": "\\s(a)\\s", 48 | "captures": { 49 | "1":{ 50 | "name": "keyword.control.turtle" 51 | } 52 | } 53 | }, 54 | "literals": { 55 | "patterns": [ 56 | { "include": "#string"}, 57 | { "include": "#numeric" }, 58 | { "include": "#boolean" } 59 | ] 60 | }, 61 | "string": { 62 | "patterns": [ 63 | { "include": "#triple-squote-string-literal" }, 64 | { "include": "#triple-dquote-string-literal" }, 65 | { "include": "#single-squote-string-literal" }, 66 | { "include": "#single-dquote-string-literal" }, 67 | { "include": "#triple-tick-string-literal" } 68 | ] 69 | }, 70 | "single-squote-string-literal": { 71 | "name": "string.quoted.single.turtle", 72 | "begin": "'", 73 | "beginCaptures": { 74 | "0": { 75 | "name": "punctuation.definition.string.begin.turtle" 76 | } 77 | }, 78 | "end": "'", 79 | "endCaptures": { 80 | "1": { 81 | "name": "punctuation.definition.string.end.turtle" 82 | }, 83 | "2": { 84 | "name": "invalid.illegal.newline.turtle" 85 | } 86 | }, 87 | "patterns": [ 88 | { "include": "#string-character-escape" } 89 | ] 90 | }, 91 | "single-dquote-string-literal": { 92 | "name": "string.quoted.double.turtle", 93 | "begin": "\"", 94 | "beginCaptures": { 95 | "0": { 96 | "name": "punctuation.definition.string.begin.turtle" 97 | } 98 | }, 99 | "end": "\"", 100 | "endCaptures": { 101 | "0": { 102 | "name": "punctuation.definition.string.end.turtle" 103 | } 104 | }, 105 | "patterns": [ 106 | { "include": "#string-character-escape" } 107 | ] 108 | }, 109 | "triple-squote-string-literal": { 110 | "name": "string.quoted.triple.turtle", 111 | "begin": "'''", 112 | "end": "'''", 113 | "beginCaptures": { 114 | "0": { 115 | "name": "punctuation.definition.string.begin.turtle" 116 | } 117 | }, 118 | "endCaptures": { 119 | "0": { 120 | "name": "punctuation.definition.string.end.turtle" 121 | } 122 | }, 123 | "patterns": [ 124 | { "include": "#string-character-escape" } 125 | ] 126 | }, 127 | "triple-dquote-string-literal": { 128 | "name": "string.quoted.triple.turtle", 129 | "begin": "\"\"\"", 130 | "end": "\"\"\"", 131 | "beginCaptures": { 132 | "0": { 133 | "name": "punctuation.definition.string.begin.turtle" 134 | } 135 | }, 136 | "endCaptures": { 137 | "0": { 138 | "name": "punctuation.definition.string.end.turtle" 139 | } 140 | }, 141 | "patterns": [ 142 | { "include": "#string-character-escape" } 143 | ] 144 | }, 145 | "triple-tick-string-literal": { 146 | "name": "string.quoted.triple.turtle", 147 | "begin": "```", 148 | "end": "```", 149 | "beginCaptures": { 150 | "0": { 151 | "name": "punctuation.definition.string.begin.turtle" 152 | } 153 | }, 154 | "endCaptures": { 155 | "0": { 156 | "name": "punctuation.definition.string.end.turtle" 157 | } 158 | }, 159 | "patterns": [ 160 | { "include": "#string-character-escape" } 161 | ] 162 | }, 163 | "string-character-escape": { 164 | "name": "constant.character.escape.turtle", 165 | "match": "\\\\(x\\h{2}|[0-2][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)" 166 | }, 167 | "numeric": { 168 | "patterns":[ 169 | { "include": "#integer" } 170 | ] 171 | }, 172 | "integer": { 173 | "name": "constant.numeric.turtle", 174 | "match": "[+-]?(?:\\d+|[0-9]+\\.[0-9]*|\\.[0-9]+(?:[eE][+-]?\\d+)?)" 175 | }, 176 | "boolean": { 177 | "name": "constant.language.sparql", 178 | "match": "\\b(?i:true|false)\\b" 179 | }, 180 | "language-tag": { 181 | "name": "meta.string-literal-language-tag.turtle", 182 | "match": "@(\\w+)", 183 | "captures":{ 184 | "1":{ 185 | "name": "entity.name.class.turtle" 186 | } 187 | } 188 | }, 189 | "rule-constraint": { 190 | "name": "meta.rule-constraint.turtle", 191 | "begin": "(rule:content) (\"\"\")", 192 | "beginCaptures": { 193 | "1": { 194 | "patterns": [ 195 | { "include": "#prefixed-name" } 196 | ] 197 | }, 198 | "2": { 199 | "name": "string.quoted.triple.turtle" 200 | } 201 | }, 202 | "end": "\"\"\"", 203 | "endCaptures": { 204 | "0": { 205 | "name": "string.quoted.triple.turtle" 206 | } 207 | }, 208 | "patterns": [ 209 | { "include": "source.srs" } 210 | ] 211 | } 212 | } 213 | } -------------------------------------------------------------------------------- /stardog-rdf-grammars/test/test.rq: -------------------------------------------------------------------------------- 1 | PREFIX a: 2 | PREFIX dc: 3 | PREFIX foaf: 4 | PREFIX rdfs: 5 | 6 | # Comment! 7 | 8 | SELECT ?given ?family 9 | WHERE { 10 | { 11 | ?annot a:annotates . 12 | ?annot dc:creator ?c . 13 | OPTIONAL {?c foaf:givenName ?given ; 14 | foaf:familyName ?family } 15 | } UNION { 16 | ?c !foaf:knows/foaf:knows? ?thing. 17 | ?thing 18 | } MINUS { 19 | ?thing rdfs:label "剛柔流"@jp 20 | } 21 | FILTER isBlank(?c) 22 | } 23 | 24 | #TEST of SPARQL syntax highlighting comment 25 | 26 | PREFIX data: 27 | PREFIX foaf: 28 | PREFIX rdfs: 29 | 30 | prefix:relatedTo :Thing 31 | prefix:relatedTo [ a :Thing]; 32 | 33 | SELECT ?mbox ?nick ?ppd 34 | FROM NAMED 35 | FROM NAMED 36 | WHERE 37 | { 38 | GRAPH data:aliceFoaf 39 | { 40 | ?alice foaf:mbox ; 41 | foaf:knows ?whom . 42 | ?whom foaf:mbox ?mbox ; 43 | rdfs:seeAlso ?ppd . 44 | ?ppd a foaf:PersonaProfileDocument . 45 | } . 46 | GRAPH ?ppd 47 | { 48 | ?w foaf:mbox ?mbox ; 49 | foaf:nick ?nick 50 | } 51 | } 52 | 53 | SELECT ?test 54 | FROM NAMED ; 55 | 56 | '''The librarian said, "Perhaps you would enjoy 'War and Peace'."''' 57 | 'chat'@fr 58 | 1.0e6 59 | true 60 | false 61 | "1.300"^^xsd:decimal 62 | 63 | SELECT ?P (COUNT(?O) AS ?C) 64 | WHERE { ?S ?P ?O } 65 | GROUP BY ?P 66 | HAVING (COUNT(?O) > 2 ) -------------------------------------------------------------------------------- /stardog-rdf-grammars/test/test.shacl: -------------------------------------------------------------------------------- 1 | ex:PersonShape 2 | a sh:NodeShape ; 3 | sh:targetClass ex:Person ; # Applies to all persons 4 | sh:property [ # _:b1 5 | sh:path ex:ssn ; # constrains the values of ex:ssn 6 | sh:maxCount 1 ; 7 | sh:datatype xsd:string ; 8 | sh:pattern "^\\d{3}-\\d{2}-\\d{4}$" ; 9 | ] ; 10 | sh:property [ # _:b2 11 | sh:path ex:worksFor ; 12 | sh:class ex:Company ; 13 | sh:nodeKind sh:IRI ; 14 | ] ; 15 | sh:closed true ; 16 | sh:ignoredProperties ( rdf:type ) . 17 | -------------------------------------------------------------------------------- /stardog-rdf-grammars/test/test.sms: -------------------------------------------------------------------------------- 1 | dept:location "{\"loc\"}" ; 2 | dept:deptno "{\"deptno\"}"^^xsd:integer ; 3 | sm:map [ 4 | sm:table "DEPT" ; 5 | ] . 6 | 7 | emp:{"empno"} a emp:Employee ; 8 | emp:name "{\"ename\"}" ; 9 | emp:role emp:{ROLE} ; 10 | emp:department dept:{"deptno"} ; 11 | sm:map [ 12 | sm:query """ 13 | SELECT \"empno\", \"ename\", \"deptno\", (CASE \"job\" 14 | WHEN 'CLERK' THEN 'general-office' 15 | WHEN 'NIGHTGUARD' THEN 'security' 16 | WHEN 'ENGINEER' THEN 'engineering' 17 | END) AS ROLE FROM \"EMP\" 18 | """ ; 19 | ] . -------------------------------------------------------------------------------- /stardog-rdf-grammars/test/test.srs: -------------------------------------------------------------------------------- 1 | IF 2 | { ?x :hasFather ?y . ?y :hasBrother ?z } 3 | THEN 4 | { ?x :hasUncle ?z } -------------------------------------------------------------------------------- /stardog-rdf-grammars/test/test.trig: -------------------------------------------------------------------------------- 1 | @prefix rdf: . 2 | @prefix dc: . 3 | @prefix foaf: . 4 | 5 | # default graph - no {} used. 6 | dc:publisher "Bob" . 7 | dc:publisher "Alice" . 8 | 9 | # GRAPH keyword to highlight a named graph 10 | # Abbreviation of triples using ; 11 | GRAPH 12 | { 13 | [] foaf:name "Bob" ; 14 | foaf:mbox ; 15 | foaf:knows _:b . 16 | } 17 | 18 | GRAPH 19 | { 20 | _:b foaf:name "Alice" ; 21 | foaf:mbox 22 | } 23 | -------------------------------------------------------------------------------- /stardog-rdf-grammars/test/test.ttl: -------------------------------------------------------------------------------- 1 | @base . 2 | @prefix rdf: . 3 | @prefix rdfs: . 4 | @prefix foaf: . 5 | @prefix rel: . 6 | 7 | <#green-goblin> 8 | rel:enemyOf <#spiderman> ; 9 | a foaf:Person ; # in the context of the Marvel universe 10 | foaf:name "Green Goblin" . 11 | 12 | <#spiderman> 13 | rel:enemyOf <#green-goblin> ; 14 | a foaf:Person ; 15 | foaf:name "Spiderman", "Человек-паук"@ru . 16 | 17 | foaf:mbox 18 | 19 | # Numbers 20 | 5 21 | -5 22 | -5.3 23 | 4.2E9 24 | 4.2e9 25 | 26 | "-5"^^xsd:integer 27 | "-5.0"^^xsd:decimal 28 | "4.2E9"^^xsd:double 29 | 30 | @prefix : . 31 | 32 | :atomicNumber 2 ; # xsd:integer 33 | :atomicMass 4.002602 ; # xsd:decimal 34 | :specificGravity 1.663E-4 . # xsd:double 35 | 36 | # Booleans 37 | 38 | @prefix : . 39 | 40 | :isLandlocked false . # xsd:boolean 41 | 42 | "true"^^xsd:boolean 43 | "false"^^xsd:boolean 44 | 45 | # Blank nodes 46 | 47 | @prefix foaf: . 48 | 49 | _:alice foaf:knows _:bob . 50 | _:bob foaf:knows _:alice . 51 | 52 | @prefix foaf: . 53 | 54 | # Someone knows someone else, who has the name "Bob". 55 | [] foaf:knows [foaf:name "Bob"] . 56 | 57 | @prefix foaf: . 58 | 59 | [ foaf:name "Alice" ] foaf:knows233 [ 60 | foaf:name "Bob" ; 61 | foaf:knows [ 62 | foaf:name "Eve" ] ; 63 | foaf:mbox ] . 64 | 65 | PREFIX : 66 | (1 [:p :q] ( 2 ) ) :p2 :q2 . 67 | 68 | @prefix : . 69 | (1 2.0 3E1) :p "w" . 70 | 71 | @prefix : . 72 | 73 | :a :b "The first line\nThe second line\n more" . 74 | 75 | :a :b """The first line 76 | The second line 77 | more""" . 78 | 79 | @prefix rdf: . 80 | @prefix dc: . 81 | @prefix ex: . 82 | 83 | 84 | dc:title "RDF/XML Syntax Specification (Revised)" ; 85 | ex:editor [ 86 | ex:fullname "Dave Beckett"; 87 | ex:homePage 88 | ] . 89 | 90 | rule:content """ 91 | IF 92 | { ?x :hasFather ?y . ?y :hasBrother ?z } 93 | THEN 94 | { ?x :hasUncle ?z } 95 | """ 96 | 97 | @prefix rule: . 98 | 99 | [] a rule:SPARQLRule ; 100 | rule:content """ 101 | PREFIX : 102 | IF { 103 | ?r a :Rectangle ; 104 | :width ?w ; 105 | :height ?h 106 | BIND (?w * ?h AS ?area) 107 | } 108 | THEN { 109 | ?r :area ?area 110 | }""" -------------------------------------------------------------------------------- /vscode-langserver-shacl/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable changes to the "vscode-langserver-shacl" extension will be documented in this file. 3 | 4 | ## [0.0.1] 5 | - Initial release -------------------------------------------------------------------------------- /vscode-langserver-shacl/README.md: -------------------------------------------------------------------------------- 1 | # vscode-langserver-shacl 2 | 3 | A Visual Studio Code extension providing language intelligence (diagnostics, 4 | hover tooltips, auto-completion, etc.) for W3C standard [SHACL](https://www.w3.org/TR/shacl/) via the Language 5 | Server Protocol. 6 | 7 | ## Features 8 | 9 | - Diagnostics (error hints) 10 | - Hover tooltips (identifies entities in SHACL grammar and shows "expected" 11 | symbols in the case of an error) 12 | - Autocompletion for SHACL types and predicates 13 | - Syntax highlighting (via the `stardog-rdf-grammars` extension) 14 | - Open source 15 | - No arbitrary code execution 16 | - Powers some of the core language intelligence capabilities of [Stardog Studio](https://www.stardog.com/studio/) 17 | 18 | ## License 19 | 20 | Apache-2.0 21 | -------------------------------------------------------------------------------- /vscode-langserver-shacl/fixtures/bad/basic-bad-shacl.shacl: -------------------------------------------------------------------------------- 1 | ex:PersonShape 2 | a sh:NodeShape ; 3 | sh:minCount 1; # <-- this is the bad part; not allowed 4 | sh:targetClass ex:Person ; # Applies to all persons 5 | sh:property [ # _:b1 6 | sh:path ex:ssn ; # constrains the values of ex:ssn 7 | sh:maxCount 1 ; 8 | sh:datatype xsd:string ; 9 | sh:pattern "^\\d{3}-\\d{2}-\\d{4}$" ; 10 | ] ; 11 | sh:property [ # _:b2 12 | sh:path ex:worksFor ; 13 | sh:class ex:Company ; 14 | sh:nodeKind sh:IRI ; 15 | ] ; 16 | sh:closed true ; 17 | sh:ignoredProperties ( rdf:type ) . -------------------------------------------------------------------------------- /vscode-langserver-shacl/fixtures/bad/basic-incomplete-shacl.shacl: -------------------------------------------------------------------------------- 1 | ex:PersonShape 2 | a sh:NodeShape ; 3 | sh:targetClass ex:Person ; 4 | sh:property [ 5 | sh: 6 | -------------------------------------------------------------------------------- /vscode-langserver-shacl/out/extension.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.deactivate = exports.activate = void 0; 4 | const path = require("path"); 5 | const vscode_languageclient_1 = require("vscode-languageclient"); 6 | let client; 7 | function activate(context) { 8 | const server = context.asAbsolutePath(path.join("node_modules", "shacl-language-server", "dist", "cli.js")); 9 | const baseServerOptions = { 10 | module: server, 11 | transport: vscode_languageclient_1.TransportKind.stdio, 12 | args: ["--stdio"] 13 | }; 14 | const serverOptions = { 15 | run: baseServerOptions, 16 | debug: Object.assign(Object.assign({}, baseServerOptions), { 17 | // allow attaching VSCode in debug mode: 18 | options: { 19 | execArgv: ["--nolazy", "--inspect=6009"] 20 | } }) 21 | }; 22 | const clientOptions = { 23 | documentSelector: [ 24 | { 25 | scheme: "file", 26 | language: "shacl" 27 | } 28 | ] 29 | }; 30 | client = new vscode_languageclient_1.LanguageClient("stardogShaclLanguageServer", "Stardog SHACL Language Server", serverOptions, clientOptions); 31 | client.start(); 32 | } 33 | exports.activate = activate; 34 | function deactivate() { 35 | if (client) { 36 | return client.stop(); 37 | } 38 | } 39 | exports.deactivate = deactivate; 40 | //# sourceMappingURL=extension.js.map -------------------------------------------------------------------------------- /vscode-langserver-shacl/out/extension.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAE7B,iEAM+B;AAE/B,IAAI,MAAsB,CAAC;AAE3B,SAAgB,QAAQ,CAAC,OAAgC;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CACnC,IAAI,CAAC,IAAI,CACP,cAAc,EACd,uBAAuB,EACvB,MAAM,EACN,QAAQ,CACT,CACF,CAAC;IACF,MAAM,iBAAiB,GAAe;QACpC,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,qCAAa,CAAC,KAAK;QAC9B,IAAI,EAAE,CAAC,SAAS,CAAC;KAClB,CAAC;IACF,MAAM,aAAa,GAAkB;QACnC,GAAG,EAAE,iBAAiB;QACtB,KAAK,kCACA,iBAAiB;YACpB,wCAAwC;YACxC,OAAO,EAAE;gBACP,QAAQ,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;aACzC,GACF;KACF,CAAC;IACF,MAAM,aAAa,GAA0B;QAC3C,gBAAgB,EAAE;YAChB;gBACE,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,OAAO;aAClB;SACF;KACF,CAAC;IAEF,MAAM,GAAG,IAAI,sCAAc,CACzB,4BAA4B,EAC5B,+BAA+B,EAC/B,aAAa,EACb,aAAa,CACd,CAAC;IAEF,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAzCD,4BAyCC;AAED,SAAgB,UAAU;IACxB,IAAI,MAAM,EAAE;QACV,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;KACtB;AACH,CAAC;AAJD,gCAIC"} -------------------------------------------------------------------------------- /vscode-langserver-shacl/out/test/extension.test.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | const chai_1 = require("chai"); 13 | const path = require("path"); 14 | const vscode = require("vscode"); 15 | const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); 16 | describe("SHACL Language Server Extension", () => { 17 | let docUri; 18 | let document; 19 | beforeEach(() => __awaiter(void 0, void 0, void 0, function* () { 20 | const ext = vscode.extensions.getExtension("stardog-union.vscode-langserver-shacl"); 21 | yield ext.activate(); 22 | docUri = vscode.Uri.file(path.join(__dirname, "..", "..", "fixtures", "bad", "basic-bad-shacl.shacl")); 23 | document = yield vscode.workspace.openTextDocument(docUri); 24 | yield vscode.window.showTextDocument(document); 25 | yield sleep(2000); // let server start 26 | })); 27 | afterEach(() => { 28 | document = null; 29 | }); 30 | it("receives error diagnostics from the server", () => { 31 | const receivedDiagnostics = vscode.languages.getDiagnostics(docUri); 32 | const normalizedReceivedDiagnostics = JSON.parse(JSON.stringify(receivedDiagnostics)); 33 | chai_1.expect(normalizedReceivedDiagnostics).to.eql([ 34 | { 35 | severity: "Error", 36 | message: "A NodeShape cannot have any value for sh:minCount.", 37 | range: [ 38 | { 39 | line: 2, 40 | character: 2 41 | }, 42 | { 43 | line: 2, 44 | character: 13 45 | } 46 | ] 47 | } 48 | ]); 49 | }); 50 | it("receives hover help from the server", () => __awaiter(void 0, void 0, void 0, function* () { 51 | const hoverHelp = (yield vscode.commands.executeCommand("vscode.executeHoverProvider", docUri, new vscode.Position(0, 0))); 52 | const { contents } = hoverHelp[0]; 53 | const range = hoverHelp[0].range; 54 | chai_1.expect(typeof contents[0] === 'string' ? contents[0] : contents[0].value).to.eql("```\nPrefixedName\n```"); 55 | chai_1.expect(range.start.line).to.eql(0); 56 | chai_1.expect(range.start.character).to.eql(0); 57 | chai_1.expect(range.end.line).to.eql(0); 58 | chai_1.expect(range.end.character).to.eql(14); 59 | })); 60 | it("provides completion suggestions", () => __awaiter(void 0, void 0, void 0, function* () { 61 | docUri = vscode.Uri.file(path.join(__dirname, "..", "..", "fixtures", "bad", "basic-incomplete-shacl.shacl")); 62 | document = yield vscode.workspace.openTextDocument(docUri); 63 | yield vscode.window.showTextDocument(document); 64 | yield sleep(2000); // let server start 65 | const completions = (yield vscode.commands.executeCommand("vscode.executeCompletionItemProvider", docUri, document.positionAt(86))); 66 | const normalizedSuggestedCompletions = JSON.parse(JSON.stringify(completions.items)); 67 | // tslint:disable:no-unused-expression 68 | chai_1.expect(normalizedSuggestedCompletions.some((item) => item.label === "sh:targetClass")).to 69 | .be.true; 70 | })); 71 | }); 72 | //# sourceMappingURL=extension.test.js.map -------------------------------------------------------------------------------- /vscode-langserver-shacl/out/test/extension.test.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../src/test/extension.test.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+BAA8B;AAC9B,6BAA6B;AAC7B,iCAAiC;AAEjC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAE9E,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,IAAI,MAAkB,CAAC;IACvB,IAAI,QAAoC,CAAC;IAEzC,UAAU,CAAC,GAAS,EAAE;QACpB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,uCAAuC,CAAE,CAAC;QACrF,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CACtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAC7E,CAAC;QACF,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB;IACxC,CAAC,CAAA,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,mBAAmB,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACpE,MAAM,6BAA6B,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC;QACtF,aAAM,CAAC,6BAA6B,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC;YAC3C;gBACE,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,oDAAoD;gBAC7D,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,CAAC;wBACP,SAAS,EAAE,CAAC;qBACb;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,SAAS,EAAE,EAAE;qBACd;iBACF;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAS,EAAE;QACnD,MAAM,SAAS,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,cAAc,CACrD,6BAA6B,EAC7B,MAAM,EACN,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAC1B,CAAmB,CAAC;QACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,KAAqB,CAAC;QACjD,aAAM,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAC3G,aAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnC,aAAM,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxC,aAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACjC,aAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAA,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAS,EAAE;QAC/C,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CACtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,8BAA8B,CAAC,CACpF,CAAC;QACF,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB;QAEtC,MAAM,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,cAAc,CACvD,sCAAsC,EACtC,MAAM,EACN,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CACxB,CAA0B,CAAC;QAC5B,MAAM,8BAA8B,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QACrF,sCAAsC;QACtC,aAAM,CAAC,8BAA8B,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,gBAAgB,CAAC,CAAC,CAAC,EAAE;aAC3F,EAAE,CAAC,IAAI,CAAC;IACb,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"} -------------------------------------------------------------------------------- /vscode-langserver-shacl/out/test/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.run = void 0; 4 | const path = require("path"); 5 | const Mocha = require("mocha"); 6 | function run() { 7 | const mocha = new Mocha({ 8 | // @ts-ignore: Mocha types are missing `color` 9 | color: true, 10 | ui: "bdd", 11 | timeout: 5000, 12 | }); 13 | return new Promise((c, e) => { 14 | mocha.addFile(path.resolve(__dirname, "extension.test.js")); 15 | try { 16 | mocha.run((failures) => { 17 | if (failures > 0) { 18 | e(new Error(`${failures} tests failed.`)); 19 | } 20 | else { 21 | c(); 22 | } 23 | }); 24 | } 25 | catch (err) { 26 | e(err); 27 | } 28 | }); 29 | } 30 | exports.run = run; 31 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /vscode-langserver-shacl/out/test/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAC7B,+BAA+B;AAE/B,SAAgB,GAAG;IACjB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,8CAA8C;QAC9C,KAAK,EAAE,IAAI;QACX,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAE5D,IAAI;YACF,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACrB,IAAI,QAAQ,GAAG,CAAC,EAAE;oBAChB,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,QAAQ,gBAAgB,CAAC,CAAC,CAAC;iBAC3C;qBAAM;oBACL,CAAC,EAAE,CAAC;iBACL;YACH,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,CAAC,CAAC,GAAG,CAAC,CAAC;SACR;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAvBD,kBAuBC"} -------------------------------------------------------------------------------- /vscode-langserver-shacl/out/test/runTest.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | const cp = require("child_process"); 13 | const path = require("path"); 14 | const vscode_test_1 = require("vscode-test"); 15 | function main() { 16 | return __awaiter(this, void 0, void 0, function* () { 17 | try { 18 | const extensionDevelopmentPath = path.resolve(__dirname, "../../../"); 19 | const extensionTestsPath = path.resolve(__dirname, "./index"); 20 | const vscodeExecutablePath = yield vscode_test_1.downloadAndUnzipVSCode(); 21 | const cliPath = vscode_test_1.resolveCliPathFromVSCodeExecutablePath(vscodeExecutablePath); 22 | // Use cp.spawn / cp.exec for custom setup 23 | cp.spawnSync(cliPath, ["--disable-gpu", "--disable-extensions"], { 24 | encoding: "utf-8", 25 | stdio: "inherit", 26 | }); 27 | // Run the extension test 28 | yield vscode_test_1.runTests({ 29 | // Use the specified `code` executable 30 | vscodeExecutablePath, 31 | // @ts-ignore: vscode-test types aren't right 32 | extensionDevelopmentPath, 33 | extensionTestsPath, 34 | }); 35 | } 36 | catch (err) { 37 | console.error("Failed to run tests"); 38 | process.exit(1); 39 | } 40 | }); 41 | } 42 | main(); 43 | //# sourceMappingURL=runTest.js.map -------------------------------------------------------------------------------- /vscode-langserver-shacl/out/test/runTest.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"runTest.js","sourceRoot":"","sources":["../../src/test/runTest.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,oCAAoC;AACpC,6BAA6B;AAC7B,6CAIqB;AAErB,SAAe,IAAI;;QACjB,IAAI;YACF,MAAM,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACtE,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9D,MAAM,oBAAoB,GAAG,MAAM,oCAAsB,EAAE,CAAC;YAC5D,MAAM,OAAO,GAAG,oDAAsC,CAAC,oBAAoB,CAAC,CAAC;YAE7E,0CAA0C;YAC1C,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,sBAAsB,CAAC,EAAE;gBAC/D,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;YAEH,yBAAyB;YACzB,MAAM,sBAAQ,CAAC;gBACb,sCAAsC;gBACtC,oBAAoB;gBACpB,6CAA6C;gBAC7C,wBAAwB;gBACxB,kBAAkB;aACnB,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;IACH,CAAC;CAAA;AAED,IAAI,EAAE,CAAC"} -------------------------------------------------------------------------------- /vscode-langserver-shacl/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-langserver-shacl", 3 | "publisher": "stardog-union", 4 | "license": "Apache-2.0", 5 | "displayName": "SHACL Language Server", 6 | "description": "Language intelligence (diagnostics, hover tooltips, etc.) for SHACL", 7 | "version": "0.2.0", 8 | "contributors": [ 9 | { 10 | "name": "Jason Rogers", 11 | "email": "jason@stardog.com" 12 | } 13 | ], 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/stardog-union/stardog-vsc.git" 17 | }, 18 | "bugs": { 19 | "url": "https://github.com/stardog-union/stardog-vsc/issues" 20 | }, 21 | "homepage": "https://github.com/stardog-union/stardog-vsc/vscode-langserver-shacl/#readme", 22 | "engines": { 23 | "vscode": "^1.30.0" 24 | }, 25 | "categories": [ 26 | "Programming Languages", 27 | "Linters", 28 | "Other" 29 | ], 30 | "activationEvents": [ 31 | "onLanguage:shacl" 32 | ], 33 | "main": "./out/extension", 34 | "scripts": { 35 | "vscode:prepublish": "yarn run compile", 36 | "compile": "tsc -p ./", 37 | "watch": "tsc -watch -p ./", 38 | "test": "yarn run compile && node ./out/test/runTest.js" 39 | }, 40 | "devDependencies": { 41 | "@types/chai": "^4.1.7", 42 | "@types/mocha": "^2.2.42", 43 | "@types/node": "^8.10.25", 44 | "chai": "^4.2.0", 45 | "mocha": "^9.0.1", 46 | "tslint": "^5.8.0", 47 | "typescript": "^4.3.2", 48 | "vscode": "^1.1.37", 49 | "vscode-test": "^1.5.2" 50 | }, 51 | "dependencies": { 52 | "shacl-language-server": "^1.5.0", 53 | "vscode-languageclient": "^5.2.1" 54 | }, 55 | "extensionDependencies": [ 56 | "stardog-union.stardog-rdf-grammars" 57 | ] 58 | } 59 | -------------------------------------------------------------------------------- /vscode-langserver-shacl/src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as vscode from "vscode"; 3 | import { 4 | LanguageClient, 5 | LanguageClientOptions, 6 | ServerOptions, 7 | TransportKind, 8 | NodeModule 9 | } from "vscode-languageclient"; 10 | 11 | let client: LanguageClient; 12 | 13 | export function activate(context: vscode.ExtensionContext) { 14 | const server = context.asAbsolutePath( 15 | path.join( 16 | "node_modules", 17 | "shacl-language-server", 18 | "dist", 19 | "cli.js" 20 | ) 21 | ); 22 | const baseServerOptions: NodeModule = { 23 | module: server, 24 | transport: TransportKind.stdio, 25 | args: ["--stdio"] 26 | }; 27 | const serverOptions: ServerOptions = { 28 | run: baseServerOptions, 29 | debug: { 30 | ...baseServerOptions, 31 | // allow attaching VSCode in debug mode: 32 | options: { 33 | execArgv: ["--nolazy", "--inspect=6009"] 34 | } 35 | } 36 | }; 37 | const clientOptions: LanguageClientOptions = { 38 | documentSelector: [ 39 | { 40 | scheme: "file", 41 | language: "shacl" 42 | } 43 | ] 44 | }; 45 | 46 | client = new LanguageClient( 47 | "stardogShaclLanguageServer", 48 | "Stardog SHACL Language Server", 49 | serverOptions, 50 | clientOptions 51 | ); 52 | 53 | client.start(); 54 | } 55 | 56 | export function deactivate() { 57 | if (client) { 58 | return client.stop(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /vscode-langserver-shacl/src/test/extension.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from "chai"; 2 | import * as path from "path"; 3 | import * as vscode from "vscode"; 4 | 5 | const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); 6 | 7 | describe("SHACL Language Server Extension", () => { 8 | let docUri: vscode.Uri; 9 | let document: vscode.TextDocument | null; 10 | 11 | beforeEach(async () => { 12 | const ext = vscode.extensions.getExtension("stardog-union.vscode-langserver-shacl")!; 13 | await ext.activate(); 14 | docUri = vscode.Uri.file( 15 | path.join(__dirname, "..", "..", "fixtures", "bad", "basic-bad-shacl.shacl") 16 | ); 17 | document = await vscode.workspace.openTextDocument(docUri); 18 | await vscode.window.showTextDocument(document); 19 | await sleep(2000); // let server start 20 | }); 21 | 22 | afterEach(() => { 23 | document = null; 24 | }); 25 | 26 | it("receives error diagnostics from the server", () => { 27 | const receivedDiagnostics = vscode.languages.getDiagnostics(docUri); 28 | const normalizedReceivedDiagnostics = JSON.parse(JSON.stringify(receivedDiagnostics)); 29 | expect(normalizedReceivedDiagnostics).to.eql([ 30 | { 31 | severity: "Error", 32 | message: "A NodeShape cannot have any value for sh:minCount.", 33 | range: [ 34 | { 35 | line: 2, 36 | character: 2 37 | }, 38 | { 39 | line: 2, 40 | character: 13 41 | } 42 | ] 43 | } 44 | ]); 45 | }); 46 | 47 | it("receives hover help from the server", async () => { 48 | const hoverHelp = (await vscode.commands.executeCommand( 49 | "vscode.executeHoverProvider", 50 | docUri, 51 | new vscode.Position(0, 0) 52 | )) as vscode.Hover[]; 53 | const { contents } = hoverHelp[0]; 54 | const range = hoverHelp[0].range as vscode.Range; 55 | expect(typeof contents[0] === 'string' ? contents[0] : contents[0].value).to.eql("```\nPrefixedName\n```"); 56 | expect(range.start.line).to.eql(0); 57 | expect(range.start.character).to.eql(0); 58 | expect(range.end.line).to.eql(0); 59 | expect(range.end.character).to.eql(14); 60 | }); 61 | 62 | it("provides completion suggestions", async () => { 63 | docUri = vscode.Uri.file( 64 | path.join(__dirname, "..", "..", "fixtures", "bad", "basic-incomplete-shacl.shacl") 65 | ); 66 | document = await vscode.workspace.openTextDocument(docUri); 67 | await vscode.window.showTextDocument(document); 68 | await sleep(2000); // let server start 69 | 70 | const completions = (await vscode.commands.executeCommand( 71 | "vscode.executeCompletionItemProvider", 72 | docUri, 73 | document.positionAt(86) 74 | )) as vscode.CompletionList; 75 | const normalizedSuggestedCompletions = JSON.parse(JSON.stringify(completions.items)); 76 | // tslint:disable:no-unused-expression 77 | expect(normalizedSuggestedCompletions.some((item: any) => item.label === "sh:targetClass")).to 78 | .be.true; 79 | }); 80 | }); 81 | -------------------------------------------------------------------------------- /vscode-langserver-shacl/src/test/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as Mocha from "mocha"; 3 | 4 | export function run(): Promise { 5 | const mocha = new Mocha({ 6 | // @ts-ignore: Mocha types are missing `color` 7 | color: true, 8 | ui: "bdd", 9 | timeout: 5000, 10 | }); 11 | 12 | return new Promise((c, e) => { 13 | mocha.addFile(path.resolve(__dirname, "extension.test.js")); 14 | 15 | try { 16 | mocha.run((failures) => { 17 | if (failures > 0) { 18 | e(new Error(`${failures} tests failed.`)); 19 | } else { 20 | c(); 21 | } 22 | }); 23 | } catch (err) { 24 | e(err); 25 | } 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /vscode-langserver-shacl/src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import { downloadAndUnzipVSCode, runTests } from "vscode-test"; 3 | 4 | async function main() { 5 | try { 6 | const extensionDevelopmentPath = path.resolve(__dirname, "../../../"); 7 | const extensionTestsPath = path.resolve(__dirname, "./index"); 8 | const vscodeExecutablePath = await downloadAndUnzipVSCode(); 9 | 10 | // Run the extension test 11 | await runTests({ 12 | launchArgs: ["--disable-gpu", "--disable-extensions"], 13 | // Use the specified `code` executable 14 | vscodeExecutablePath, 15 | // @ts-ignore: vscode-test types aren't right 16 | extensionDevelopmentPath, 17 | extensionTestsPath, 18 | }); 19 | } catch (err) { 20 | console.error("Failed to run tests"); 21 | process.exit(1); 22 | } 23 | } 24 | 25 | main(); 26 | -------------------------------------------------------------------------------- /vscode-langserver-shacl/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": ["es6"], 7 | "sourceMap": true, 8 | "rootDir": "src", 9 | "strict": true, 10 | "skipLibCheck": true, 11 | "noUnusedLocals": true 12 | }, 13 | "exclude": ["node_modules", ".vscode-test"] 14 | } 15 | -------------------------------------------------------------------------------- /vscode-langserver-shacl/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-string-throw": true, 4 | "no-unused-expression": true, 5 | "no-duplicate-variable": true, 6 | "curly": true, 7 | "class-name": true, 8 | "semicolon": [true, "always"], 9 | "triple-equals": true 10 | }, 11 | "defaultSeverity": "warning" 12 | } 13 | -------------------------------------------------------------------------------- /vscode-langserver-sms/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "eg2.tslint" 6 | ] 7 | } -------------------------------------------------------------------------------- /vscode-langserver-sms/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "runtimeExecutable": "${execPath}", 13 | "args": [ 14 | "--extensionDevelopmentPath=${workspaceFolder}" 15 | ], 16 | "outFiles": [ 17 | "${workspaceFolder}/out/**/*.js" 18 | ], 19 | "preLaunchTask": "npm: watch" 20 | }, 21 | { 22 | "name": "Extension Tests", 23 | "type": "extensionHost", 24 | "request": "launch", 25 | "runtimeExecutable": "${execPath}", 26 | "args": [ 27 | "--extensionDevelopmentPath=${workspaceFolder}", 28 | "--extensionTestsPath=${workspaceFolder}/out/test" 29 | ], 30 | "outFiles": [ 31 | "${workspaceFolder}/out/test/**/*.js" 32 | ], 33 | "preLaunchTask": "npm: watch" 34 | } 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /vscode-langserver-sms/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false // set this to true to hide the "out" folder with the compiled JS files 5 | }, 6 | "search.exclude": { 7 | "out": true // set this to false to include "out" folder in search results 8 | }, 9 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts 10 | "typescript.tsc.autoDetect": "off" 11 | } -------------------------------------------------------------------------------- /vscode-langserver-sms/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "watch", 9 | "problemMatcher": "$tsc-watch", 10 | "isBackground": true, 11 | "presentation": { 12 | "reveal": "never" 13 | }, 14 | "group": { 15 | "kind": "build", 16 | "isDefault": true 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /vscode-langserver-sms/.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | out/test/** 4 | out/**/*.map 5 | src/** 6 | .gitignore 7 | tsconfig.json 8 | vsc-extension-quickstart.md 9 | tslint.json -------------------------------------------------------------------------------- /vscode-langserver-sms/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable changes to the "vscode-langserver-sms" extension will be documented in this file. 3 | 4 | ## [0.1.0] 5 | - Add snippet support for basic SMS2 mapping 6 | 7 | ## [0.0.1] 8 | - Initial release 9 | -------------------------------------------------------------------------------- /vscode-langserver-sms/README.md: -------------------------------------------------------------------------------- 1 | # vscode-langserver-sms 2 | 3 | A Visual Studio Code extension providing language intelligence (diagnostics, 4 | hover tooltips, etc.) for [Stardog Mapping Syntax 2 (SMS)](https://www.stardog.com/docs/#_stardog_mapping_syntax_2) via the Language 5 | Server Protocol. 6 | 7 | ## Features 8 | 9 | - Diagnostics (error hints) 10 | - Hover tooltips (identifies entities in SMS grammar and shows "expected" 11 | symbols in the case of an error) 12 | - Syntax highlighting (via the `stardog-rdf-grammars` extension) 13 | - Snippet suggestions 14 | - Open source 15 | - No arbitrary code execution 16 | - Powers some of the core language intelligence capabilities of [Stardog Studio](https://www.stardog.com/studio/) 17 | 18 | ## License 19 | 20 | Apache-2.0 21 | -------------------------------------------------------------------------------- /vscode-langserver-sms/fixtures/bad/expect-json-sql-graphql.sms: -------------------------------------------------------------------------------- 1 | mapping from -------------------------------------------------------------------------------- /vscode-langserver-sms/fixtures/good/empty-mapping.sms: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stardog-union/stardog-vsc/640e961abcf7bd46cee4871b71dd0d1586d414da/vscode-langserver-sms/fixtures/good/empty-mapping.sms -------------------------------------------------------------------------------- /vscode-langserver-sms/fixtures/good/minimal-mapping.sms: -------------------------------------------------------------------------------- 1 | mapping from json {} to {} where {} -------------------------------------------------------------------------------- /vscode-langserver-sms/out/extension.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.deactivate = exports.activate = void 0; 4 | const path = require("path"); 5 | const vscode_languageclient_1 = require("vscode-languageclient"); 6 | let client; 7 | function activate(context) { 8 | const server = context.asAbsolutePath(path.join("node_modules", "sms-language-server", "dist", "cli.js")); 9 | const baseServerOptions = { 10 | module: server, 11 | transport: vscode_languageclient_1.TransportKind.stdio, 12 | args: ["--stdio"] 13 | }; 14 | const serverOptions = { 15 | run: baseServerOptions, 16 | debug: Object.assign(Object.assign({}, baseServerOptions), { 17 | // allow attaching VSCode in debug mode: 18 | options: { 19 | execArgv: ["--nolazy", "--inspect=6009"] 20 | } }) 21 | }; 22 | const clientOptions = { 23 | documentSelector: [ 24 | { 25 | scheme: "file", 26 | language: "sms" 27 | }, 28 | { 29 | scheme: "file", 30 | language: "stardog-mapping-syntax" 31 | }, 32 | { 33 | scheme: "file", 34 | language: "sms2" 35 | } 36 | ] 37 | }; 38 | client = new vscode_languageclient_1.LanguageClient("stardogSmsLanguageServer", "Stardog SMS Language Server", serverOptions, clientOptions); 39 | client.start(); 40 | } 41 | exports.activate = activate; 42 | function deactivate() { 43 | if (client) { 44 | return client.stop(); 45 | } 46 | } 47 | exports.deactivate = deactivate; 48 | //# sourceMappingURL=extension.js.map -------------------------------------------------------------------------------- /vscode-langserver-sms/out/extension.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAE7B,iEAM+B;AAE/B,IAAI,MAAsB,CAAC;AAE3B,SAAgB,QAAQ,CAAC,OAAgC;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CACnC,IAAI,CAAC,IAAI,CACP,cAAc,EACd,qBAAqB,EACrB,MAAM,EACN,QAAQ,CACT,CACF,CAAC;IACF,MAAM,iBAAiB,GAAe;QACpC,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,qCAAa,CAAC,KAAK;QAC9B,IAAI,EAAE,CAAC,SAAS,CAAC;KAClB,CAAC;IACF,MAAM,aAAa,GAAkB;QACnC,GAAG,EAAE,iBAAiB;QACtB,KAAK,kCACA,iBAAiB;YACpB,wCAAwC;YACxC,OAAO,EAAE;gBACP,QAAQ,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;aACzC,GACF;KACF,CAAC;IACF,MAAM,aAAa,GAA0B;QAC3C,gBAAgB,EAAE;YAChB;gBACE,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,KAAK;aAChB;YACD;gBACE,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,wBAAwB;aACnC;YACD;gBACE,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;aACjB;SACF;KACF,CAAC;IAEF,MAAM,GAAG,IAAI,sCAAc,CACzB,0BAA0B,EAC1B,6BAA6B,EAC7B,aAAa,EACb,aAAa,CACd,CAAC;IAEF,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAjDD,4BAiDC;AAED,SAAgB,UAAU;IACxB,IAAI,MAAM,EAAE;QACV,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;KACtB;AACH,CAAC;AAJD,gCAIC"} -------------------------------------------------------------------------------- /vscode-langserver-sms/out/test/extension.test.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | const chai_1 = require("chai"); 13 | const path = require("path"); 14 | const vscode = require("vscode"); 15 | const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); 16 | describe("SMS Language Server Extension", () => { 17 | let docUri; 18 | let document; 19 | beforeEach(() => __awaiter(void 0, void 0, void 0, function* () { 20 | const ext = vscode.extensions.getExtension("stardog-union.vscode-langserver-sms"); 21 | yield ext.activate(); 22 | docUri = vscode.Uri.file(path.join(__dirname, "..", "..", "fixtures", "bad", "expect-json-sql-graphql.sms")); 23 | document = yield vscode.workspace.openTextDocument(docUri); 24 | yield vscode.window.showTextDocument(document); 25 | yield sleep(2000); // let server start 26 | })); 27 | afterEach(() => { 28 | document = null; 29 | }); 30 | it("receives error diagnostics from the server", () => { 31 | const receivedDiagnostics = vscode.languages.getDiagnostics(docUri); 32 | const normalizedReceivedDiagnostics = JSON.parse(JSON.stringify(receivedDiagnostics)); 33 | chai_1.expect(normalizedReceivedDiagnostics).to.eql([ 34 | { 35 | severity: "Error", 36 | message: "Expecting: one of these possible Token sequences:\n 1. [Sql]\n 2. [Json]\n 3. [GraphQl]\n 4. [Csv]\nbut found: ''", 37 | range: [ 38 | { 39 | line: 0, 40 | character: 12 41 | }, 42 | { 43 | line: 0, 44 | character: 13 45 | } 46 | ], 47 | source: "FromClause" 48 | } 49 | ]); 50 | }); 51 | it("receives hover help from the server", () => __awaiter(void 0, void 0, void 0, function* () { 52 | const hoverHelp = (yield vscode.commands.executeCommand("vscode.executeHoverProvider", docUri, new vscode.Position(0, 0))); 53 | const { contents } = hoverHelp[0]; 54 | const range = hoverHelp[0].range; 55 | chai_1.expect(typeof contents[0] === 'string' ? contents[0] : contents[0].value).to.eql("```\nMappingDecl\n```"); 56 | chai_1.expect(range.start.line).to.eql(0); 57 | chai_1.expect(range.start.character).to.eql(0); 58 | chai_1.expect(range.end.line).to.eql(0); 59 | chai_1.expect(range.end.character).to.eql(7); 60 | })); 61 | it("provides snippets", () => __awaiter(void 0, void 0, void 0, function* () { 62 | docUri = vscode.Uri.file(path.join(__dirname, "..", "..", "fixtures", "good", "empty-mapping.sms")); 63 | document = yield vscode.workspace.openTextDocument(docUri); 64 | yield vscode.window.showTextDocument(document); 65 | yield sleep(2000); // let server start 66 | const completions = (yield vscode.commands.executeCommand("vscode.executeCompletionItemProvider", docUri, new vscode.Position(0, 0))); 67 | const normalizedSuggestedCompletion = JSON.parse(JSON.stringify(completions.items[0])); 68 | chai_1.expect(normalizedSuggestedCompletion).to.eql({ 69 | detail: "Create a basic fill-in-the-blanks SMS2 mapping", 70 | documentation: 'Inserts a basic mapping in Stardog Mapping Syntax 2 (SMS2) with tabbing functionality and content assistance. For more documentation of SMS2, check out "Help" --> "Stardog Docs".', 71 | insertText: { 72 | _tabstop: 1, 73 | value: "# A basic SMS2 mapping.\nMAPPING$0\nFROM ${1|SQL,JSON,GRAPHQL|} {\n $2\n}\nTO {\n $3\n}\nWHERE {\n $4\n}\n" 74 | }, 75 | label: "basicSMS2Mapping", 76 | kind: "Enum", 77 | sortText: "basicSMS2Mapping", 78 | }); 79 | })); 80 | }); 81 | //# sourceMappingURL=extension.test.js.map -------------------------------------------------------------------------------- /vscode-langserver-sms/out/test/extension.test.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../src/test/extension.test.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /vscode-langserver-sms/out/test/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.run = void 0; 4 | const path = require("path"); 5 | const Mocha = require("mocha"); 6 | function run() { 7 | const mocha = new Mocha({ 8 | // @ts-ignore: Mocha types are missing `color` 9 | color: true, 10 | ui: "bdd", 11 | timeout: 5000, 12 | }); 13 | return new Promise((c, e) => { 14 | mocha.addFile(path.resolve(__dirname, "extension.test.js")); 15 | try { 16 | mocha.run((failures) => { 17 | if (failures > 0) { 18 | e(new Error(`${failures} tests failed.`)); 19 | } 20 | else { 21 | c(); 22 | } 23 | }); 24 | } 25 | catch (err) { 26 | e(err); 27 | } 28 | }); 29 | } 30 | exports.run = run; 31 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /vscode-langserver-sms/out/test/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAC7B,+BAA+B;AAE/B,SAAgB,GAAG;IACjB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,8CAA8C;QAC9C,KAAK,EAAE,IAAI;QACX,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAE5D,IAAI;YACF,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACrB,IAAI,QAAQ,GAAG,CAAC,EAAE;oBAChB,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,QAAQ,gBAAgB,CAAC,CAAC,CAAC;iBAC3C;qBAAM;oBACL,CAAC,EAAE,CAAC;iBACL;YACH,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,CAAC,CAAC,GAAG,CAAC,CAAC;SACR;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAvBD,kBAuBC"} -------------------------------------------------------------------------------- /vscode-langserver-sms/out/test/runTest.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | const cp = require("child_process"); 13 | const path = require("path"); 14 | const vscode_test_1 = require("vscode-test"); 15 | function main() { 16 | return __awaiter(this, void 0, void 0, function* () { 17 | try { 18 | const extensionDevelopmentPath = path.resolve(__dirname, "../../"); 19 | const extensionTestsPath = path.resolve(__dirname, "./index"); 20 | const vscodeExecutablePath = yield vscode_test_1.downloadAndUnzipVSCode(); 21 | const cliPath = vscode_test_1.resolveCliPathFromVSCodeExecutablePath(vscodeExecutablePath); 22 | // Use cp.spawn / cp.exec for custom setup 23 | cp.spawnSync(cliPath, [ 24 | "--disable-gpu", 25 | "--disable-extensions", 26 | "--install-extension", 27 | "GraphQL.vscode-graphql", 28 | "--force", 29 | ], { 30 | encoding: "utf-8", 31 | stdio: "inherit", 32 | }); 33 | // Run the extension test 34 | yield vscode_test_1.runTests({ 35 | // Use the specified `code` executable 36 | vscodeExecutablePath, 37 | // @ts-ignore: vscode-test types aren't right 38 | extensionDevelopmentPath, 39 | extensionTestsPath, 40 | }); 41 | } 42 | catch (err) { 43 | console.error("Failed to run tests"); 44 | process.exit(1); 45 | } 46 | }); 47 | } 48 | main(); 49 | //# sourceMappingURL=runTest.js.map -------------------------------------------------------------------------------- /vscode-langserver-sms/out/test/runTest.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"runTest.js","sourceRoot":"","sources":["../../src/test/runTest.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,oCAAoC;AACpC,6BAA6B;AAC7B,6CAIqB;AAErB,SAAe,IAAI;;QACjB,IAAI;YACF,MAAM,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACnE,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9D,MAAM,oBAAoB,GAAG,MAAM,oCAAsB,EAAE,CAAC;YAC5D,MAAM,OAAO,GAAG,oDAAsC,CAAC,oBAAoB,CAAC,CAAC;YAE7E,0CAA0C;YAC1C,EAAE,CAAC,SAAS,CACV,OAAO,EACP;gBACE,eAAe;gBACf,sBAAsB;gBACtB,qBAAqB;gBACrB,wBAAwB;gBACxB,SAAS;aACV,EACD;gBACE,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,SAAS;aACjB,CACF,CAAC;YAEF,yBAAyB;YACzB,MAAM,sBAAQ,CAAC;gBACb,sCAAsC;gBACtC,oBAAoB;gBACpB,6CAA6C;gBAC7C,wBAAwB;gBACxB,kBAAkB;aACnB,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;IACH,CAAC;CAAA;AAED,IAAI,EAAE,CAAC"} -------------------------------------------------------------------------------- /vscode-langserver-sms/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-langserver-sms", 3 | "publisher": "stardog-union", 4 | "license": "Apache-2.0", 5 | "displayName": "Stardog Mapping Syntax 2 (SMS) Language Server", 6 | "description": "Language intelligence (diagnostics, hover tooltips, etc.) for Stardog Mapping Syntax 2 (SMS)", 7 | "version": "0.2.0", 8 | "contributors": [ 9 | { 10 | "name": "Jason Rogers", 11 | "email": "jason@stardog.com" 12 | } 13 | ], 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/stardog-union/stardog-vsc.git" 17 | }, 18 | "bugs": { 19 | "url": "https://github.com/stardog-union/stardog-vsc/issues" 20 | }, 21 | "homepage": "https://github.com/stardog-union/stardog-vsc/vscode-langserver-sms/#readme", 22 | "engines": { 23 | "vscode": "^1.30.0" 24 | }, 25 | "categories": [ 26 | "Programming Languages", 27 | "Linters", 28 | "Other" 29 | ], 30 | "activationEvents": [ 31 | "onLanguage:sms", 32 | "onLanguage:sms2", 33 | "onLanguage:stardog-mapping-syntax" 34 | ], 35 | "main": "./out/extension", 36 | "scripts": { 37 | "vscode:prepublish": "yarn run compile", 38 | "compile": "tsc -p ./", 39 | "watch": "tsc -watch -p ./", 40 | "test": "yarn run compile && node ./out/test/runTest.js" 41 | }, 42 | "devDependencies": { 43 | "@types/chai": "^4.1.7", 44 | "@types/mocha": "^2.2.42", 45 | "@types/node": "^15.12.4", 46 | "chai": "^4.2.0", 47 | "mocha": "^9.0.1", 48 | "tslint": "^5.8.0", 49 | "typescript": "^4.3.4", 50 | "vscode": "^1.1.37", 51 | "vscode-test": "^1.5.2" 52 | }, 53 | "dependencies": { 54 | "sms-language-server": "^3.1.0", 55 | "vscode-languageclient": "^5.2.1" 56 | }, 57 | "extensionDependencies": [ 58 | "stardog-union.stardog-rdf-grammars" 59 | ] 60 | } 61 | -------------------------------------------------------------------------------- /vscode-langserver-sms/src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as vscode from "vscode"; 3 | import { 4 | LanguageClient, 5 | LanguageClientOptions, 6 | ServerOptions, 7 | TransportKind, 8 | NodeModule 9 | } from "vscode-languageclient"; 10 | 11 | let client: LanguageClient; 12 | 13 | export function activate(context: vscode.ExtensionContext) { 14 | const server = context.asAbsolutePath( 15 | path.join( 16 | "node_modules", 17 | "sms-language-server", 18 | "dist", 19 | "cli.js" 20 | ) 21 | ); 22 | const baseServerOptions: NodeModule = { 23 | module: server, 24 | transport: TransportKind.stdio, 25 | args: ["--stdio"] 26 | }; 27 | const serverOptions: ServerOptions = { 28 | run: baseServerOptions, 29 | debug: { 30 | ...baseServerOptions, 31 | // allow attaching VSCode in debug mode: 32 | options: { 33 | execArgv: ["--nolazy", "--inspect=6009"] 34 | } 35 | } 36 | }; 37 | const clientOptions: LanguageClientOptions = { 38 | documentSelector: [ 39 | { 40 | scheme: "file", 41 | language: "sms" 42 | }, 43 | { 44 | scheme: "file", 45 | language: "stardog-mapping-syntax" 46 | }, 47 | { 48 | scheme: "file", 49 | language: "sms2" 50 | } 51 | ] 52 | }; 53 | 54 | client = new LanguageClient( 55 | "stardogSmsLanguageServer", 56 | "Stardog SMS Language Server", 57 | serverOptions, 58 | clientOptions 59 | ); 60 | 61 | client.start(); 62 | } 63 | 64 | export function deactivate() { 65 | if (client) { 66 | return client.stop(); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /vscode-langserver-sms/src/test/extension.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from "chai"; 2 | import * as path from "path"; 3 | import * as vscode from "vscode"; 4 | 5 | const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); 6 | 7 | describe("SMS Language Server Extension", () => { 8 | let docUri: vscode.Uri; 9 | let document: vscode.TextDocument | null; 10 | 11 | beforeEach(async () => { 12 | const ext = vscode.extensions.getExtension("stardog-union.vscode-langserver-sms")!; 13 | await ext.activate(); 14 | docUri = vscode.Uri.file( 15 | path.join(__dirname, "..", "..", "fixtures", "bad", "expect-json-sql-graphql.sms") 16 | ); 17 | document = await vscode.workspace.openTextDocument(docUri); 18 | await vscode.window.showTextDocument(document); 19 | await sleep(2000); // let server start 20 | }); 21 | 22 | afterEach(() => { 23 | document = null; 24 | }); 25 | 26 | it("receives error diagnostics from the server", () => { 27 | const receivedDiagnostics = vscode.languages.getDiagnostics(docUri); 28 | const normalizedReceivedDiagnostics = JSON.parse(JSON.stringify(receivedDiagnostics)); 29 | expect(normalizedReceivedDiagnostics).to.eql([ 30 | { 31 | severity: "Error", 32 | message: "Expecting: one of these possible Token sequences:\n 1. [Sql]\n 2. [Json]\n 3. [GraphQl]\n 4. [Csv]\nbut found: ''", 33 | range: [ 34 | { 35 | line: 0, 36 | character: 12 37 | }, 38 | { 39 | line: 0, 40 | character: 13 41 | } 42 | ], 43 | source: "FromClause" 44 | } 45 | ]); 46 | }); 47 | 48 | it("receives hover help from the server", async () => { 49 | const hoverHelp = (await vscode.commands.executeCommand( 50 | "vscode.executeHoverProvider", 51 | docUri, 52 | new vscode.Position(0, 0) 53 | )) as vscode.Hover[]; 54 | const { contents } = hoverHelp[0]; 55 | const range = hoverHelp[0].range as vscode.Range; 56 | expect(typeof contents[0] === 'string' ? contents[0] : contents[0].value).to.eql("```\nMappingDecl\n```"); 57 | expect(range.start.line).to.eql(0); 58 | expect(range.start.character).to.eql(0); 59 | expect(range.end.line).to.eql(0); 60 | expect(range.end.character).to.eql(7); 61 | }); 62 | 63 | it("provides snippets", async () => { 64 | docUri = vscode.Uri.file( 65 | path.join(__dirname, "..", "..", "fixtures", "good", "empty-mapping.sms") 66 | ); 67 | document = await vscode.workspace.openTextDocument(docUri); 68 | await vscode.window.showTextDocument(document); 69 | await sleep(2000); // let server start 70 | 71 | const completions = (await vscode.commands.executeCommand( 72 | "vscode.executeCompletionItemProvider", 73 | docUri, 74 | new vscode.Position(0, 0) 75 | )) as vscode.CompletionList; 76 | const normalizedSuggestedCompletion = JSON.parse(JSON.stringify(completions.items[0])); 77 | expect(normalizedSuggestedCompletion).to.eql({ 78 | detail: "Create a basic fill-in-the-blanks SMS2 mapping", 79 | documentation: 80 | 'Inserts a basic mapping in Stardog Mapping Syntax 2 (SMS2) with tabbing functionality and content assistance. For more documentation of SMS2, check out "Help" --> "Stardog Docs".', 81 | insertText: { 82 | _tabstop: 1, 83 | value: 84 | "# A basic SMS2 mapping.\nMAPPING$0\nFROM ${1|SQL,JSON,GRAPHQL|} {\n $2\n}\nTO {\n $3\n}\nWHERE {\n $4\n}\n" 85 | }, 86 | label: "basicSMS2Mapping", 87 | kind: "Enum", 88 | sortText: "basicSMS2Mapping", 89 | }); 90 | }); 91 | }); 92 | -------------------------------------------------------------------------------- /vscode-langserver-sms/src/test/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as Mocha from "mocha"; 3 | 4 | export function run(): Promise { 5 | const mocha = new Mocha({ 6 | // @ts-ignore: Mocha types are missing `color` 7 | color: true, 8 | ui: "bdd", 9 | timeout: 5000, 10 | }); 11 | 12 | return new Promise((c, e) => { 13 | mocha.addFile(path.resolve(__dirname, "extension.test.js")); 14 | 15 | try { 16 | mocha.run((failures) => { 17 | if (failures > 0) { 18 | e(new Error(`${failures} tests failed.`)); 19 | } else { 20 | c(); 21 | } 22 | }); 23 | } catch (err) { 24 | e(err); 25 | } 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /vscode-langserver-sms/src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import { downloadAndUnzipVSCode, runTests } from "vscode-test"; 3 | 4 | async function main() { 5 | try { 6 | const extensionDevelopmentPath = path.resolve(__dirname, "../../../"); 7 | const extensionTestsPath = path.resolve(__dirname, "./index"); 8 | const vscodeExecutablePath = await downloadAndUnzipVSCode(); 9 | 10 | // Run the extension test 11 | await runTests({ 12 | launchArgs: ["--disable-gpu", "--disable-extensions"], 13 | // Use the specified `code` executable 14 | vscodeExecutablePath, 15 | // @ts-ignore: vscode-test types aren't right 16 | extensionDevelopmentPath, 17 | extensionTestsPath, 18 | }); 19 | } catch (err) { 20 | console.error("Failed to run tests"); 21 | process.exit(1); 22 | } 23 | } 24 | 25 | main(); 26 | -------------------------------------------------------------------------------- /vscode-langserver-sms/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": ["es6"], 7 | "sourceMap": true, 8 | "rootDir": "src", 9 | "strict": true, 10 | "noUnusedLocals": true 11 | }, 12 | "exclude": ["node_modules", ".vscode-test"] 13 | } 14 | -------------------------------------------------------------------------------- /vscode-langserver-sms/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-string-throw": true, 4 | "no-unused-expression": true, 5 | "no-duplicate-variable": true, 6 | "curly": true, 7 | "class-name": true, 8 | "semicolon": [true, "always"], 9 | "triple-equals": true 10 | }, 11 | "defaultSeverity": "warning" 12 | } 13 | -------------------------------------------------------------------------------- /vscode-langserver-sparql/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "eg2.tslint" 6 | ] 7 | } -------------------------------------------------------------------------------- /vscode-langserver-sparql/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "runtimeExecutable": "${execPath}", 13 | "args": [ 14 | "--extensionDevelopmentPath=${workspaceFolder}" 15 | ], 16 | "outFiles": [ 17 | "${workspaceFolder}/out/**/*.js" 18 | ], 19 | "preLaunchTask": "npm: watch" 20 | }, 21 | { 22 | "name": "Extension Tests", 23 | "type": "extensionHost", 24 | "request": "launch", 25 | "runtimeExecutable": "${execPath}", 26 | "args": [ 27 | "--extensionDevelopmentPath=${workspaceFolder}", 28 | "--extensionTestsPath=${workspaceFolder}/out/test" 29 | ], 30 | "outFiles": [ 31 | "${workspaceFolder}/out/test/**/*.js" 32 | ], 33 | "preLaunchTask": "npm: watch" 34 | } 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /vscode-langserver-sparql/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false // set this to true to hide the "out" folder with the compiled JS files 5 | }, 6 | "search.exclude": { 7 | "out": true // set this to false to include "out" folder in search results 8 | }, 9 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts 10 | "typescript.tsc.autoDetect": "off" 11 | } -------------------------------------------------------------------------------- /vscode-langserver-sparql/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "watch", 9 | "problemMatcher": "$tsc-watch", 10 | "isBackground": true, 11 | "presentation": { 12 | "reveal": "never" 13 | }, 14 | "group": { 15 | "kind": "build", 16 | "isDefault": true 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /vscode-langserver-sparql/.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | out/test/** 4 | out/**/*.map 5 | src/** 6 | .gitignore 7 | tsconfig.json 8 | vsc-extension-quickstart.md 9 | tslint.json -------------------------------------------------------------------------------- /vscode-langserver-sparql/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "vscode-langserver-sparql" extension will be documented in this file. 4 | 5 | ## [0.2.1] 6 | 7 | - Add support for `.sq` file extensions 8 | 9 | ## [0.1.0] 10 | 11 | - Follow convention and suggest SPARQL keywords in uppercase 12 | - Add support for Stardog's UNNEST keyword 13 | - Prefix relationships and types when prefixes are available 14 | - Better autocompletion in cases where longer alternatives exist 15 | 16 | ## [0.0.1] 17 | 18 | - Initial release 19 | -------------------------------------------------------------------------------- /vscode-langserver-sparql/README.md: -------------------------------------------------------------------------------- 1 | # vscode-langserver-sparql 2 | 3 | A Visual Studio Code extension providing language intelligence (autocomplete, 4 | diagnostics, hover tooltips, etc.) for the [SPARQL query language](https://www.stardog.com/tutorials/sparql/), including both 5 | [W3C standard SPARQL](https://www.w3.org/TR/sparql11-query/) and [Stardog](https://www.stardog.com/) extensions (e.g., [PATHS queries](https://www.stardog.com/docs/#_path_queries)), 6 | via the Language Server Protocol. 7 | 8 | ## Features 9 | 10 | - Autocompletion for SPARQL keywords, including Stardog extensions 11 | - Diagnostics (error hints) 12 | - Hover tooltips (identifies entities in SPARQL grammar and shows "expected" 13 | symbols in the case of an error) 14 | - Syntax highlighting (via the `stardog-rdf-grammars` extension) 15 | - Open source 16 | - No arbitrary code execution 17 | - Powers some of the core language intelligence capabilities of [Stardog Studio](https://www.stardog.com/studio/) 18 | 19 | ## License 20 | 21 | Apache-2.0 22 | -------------------------------------------------------------------------------- /vscode-langserver-sparql/fixtures/bad/basic-bad-select.sparql: -------------------------------------------------------------------------------- 1 | PREFIX fakePrefix: 2 | 3 | select distinct ?s wher { 4 | ?s < 5 | } -------------------------------------------------------------------------------- /vscode-langserver-sparql/out/extension.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.deactivate = exports.activate = void 0; 4 | const path = require("path"); 5 | const vscode_languageclient_1 = require("vscode-languageclient"); 6 | let client; 7 | function activate(context) { 8 | const server = context.asAbsolutePath(path.join("node_modules", "sparql-language-server", "dist", "cli.js")); 9 | const baseServerOptions = { 10 | module: server, 11 | transport: vscode_languageclient_1.TransportKind.stdio, 12 | args: ["--stdio"] 13 | }; 14 | const serverOptions = { 15 | run: baseServerOptions, 16 | debug: Object.assign(Object.assign({}, baseServerOptions), { 17 | // allow attaching VSCode in debug mode: 18 | options: { 19 | execArgv: ["--nolazy", "--inspect=6009"] 20 | } }) 21 | }; 22 | const clientOptions = { 23 | documentSelector: [ 24 | { 25 | scheme: "file", 26 | language: "sparql" 27 | } 28 | ] 29 | }; 30 | client = new vscode_languageclient_1.LanguageClient("stardogSparqlLanguageServer", "Stardog SPARQL Language Server", serverOptions, clientOptions); 31 | client.start(); 32 | } 33 | exports.activate = activate; 34 | function deactivate() { 35 | if (client) { 36 | return client.stop(); 37 | } 38 | } 39 | exports.deactivate = deactivate; 40 | //# sourceMappingURL=extension.js.map -------------------------------------------------------------------------------- /vscode-langserver-sparql/out/extension.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAE7B,iEAM+B;AAE/B,IAAI,MAAsB,CAAC;AAE3B,SAAgB,QAAQ,CAAC,OAAgC;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CACnC,IAAI,CAAC,IAAI,CACP,cAAc,EACd,wBAAwB,EACxB,MAAM,EACN,QAAQ,CACT,CACF,CAAC;IACF,MAAM,iBAAiB,GAAe;QACpC,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,qCAAa,CAAC,KAAK;QAC9B,IAAI,EAAE,CAAC,SAAS,CAAC;KAClB,CAAC;IACF,MAAM,aAAa,GAAkB;QACnC,GAAG,EAAE,iBAAiB;QACtB,KAAK,kCACA,iBAAiB;YACpB,wCAAwC;YACxC,OAAO,EAAE;gBACP,QAAQ,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;aACzC,GACF;KACF,CAAC;IACF,MAAM,aAAa,GAA0B;QAC3C,gBAAgB,EAAE;YAChB;gBACE,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,QAAQ;aACnB;SACF;KACF,CAAC;IAEF,MAAM,GAAG,IAAI,sCAAc,CACzB,6BAA6B,EAC7B,gCAAgC,EAChC,aAAa,EACb,aAAa,CACd,CAAC;IAEF,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAzCD,4BAyCC;AAED,SAAgB,UAAU;IACxB,IAAI,MAAM,EAAE;QACV,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;KACtB;AACH,CAAC;AAJD,gCAIC"} -------------------------------------------------------------------------------- /vscode-langserver-sparql/out/test/extension.test.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | const chai_1 = require("chai"); 13 | const path = require("path"); 14 | const vscode = require("vscode"); 15 | const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); 16 | describe("SPARQL Language Server Extension", () => { 17 | let docUri; 18 | let document; 19 | beforeEach(() => __awaiter(void 0, void 0, void 0, function* () { 20 | const ext = vscode.extensions.getExtension("stardog-union.vscode-langserver-sparql"); 21 | yield ext.activate(); 22 | docUri = vscode.Uri.file(path.join(__dirname, "..", "..", "fixtures", "bad", "basic-bad-select.sparql")); 23 | document = yield vscode.workspace.openTextDocument(docUri); 24 | yield vscode.window.showTextDocument(document); 25 | yield sleep(2000); // let server start 26 | })); 27 | afterEach(() => { 28 | document = null; 29 | }); 30 | it("receives error diagnostics from the server", () => { 31 | const receivedDiagnostics = vscode.languages.getDiagnostics(docUri); 32 | const normalizedReceivedDiagnostics = JSON.parse(JSON.stringify(receivedDiagnostics)); 33 | chai_1.expect(normalizedReceivedDiagnostics).to.eql([ 34 | { 35 | severity: "Error", 36 | message: "'{' expected.", 37 | range: [ 38 | { 39 | line: 2, 40 | character: 19 41 | }, 42 | { 43 | line: 2, 44 | character: 23 45 | } 46 | ], 47 | source: "GroupGraphPattern" 48 | }, 49 | { 50 | message: "\tExpected one of the following:\n '^'\n '!'\n '('\n IRIREF e.g. '?'\n IRIREF e.g. '*'\n IRIREF e.g. '+'\n IRIREF e.g. '/'\n IRIREF e.g. '|'\n IRIREF e.g. VAR1 e.g. ?foo\n IRIREF e.g. VAR2 e.g. ?bar\n IRIREF e.g. IRIREF e.g. \n IRIREF e.g. PNAME_LN\n IRIREF e.g. PNAME_NS\n IRIREF e.g. STRING_LITERAL1\n IRIREF e.g. STRING_LITERAL2\n IRIREF e.g. STRING_LITERAL_LONG1\n IRIREF e.g. STRING_LITERAL_LONG2\n IRIREF e.g. INTEGER\n IRIREF e.g. DECIMAL\n IRIREF e.g. DOUBLE\n IRIREF e.g. INTEGER_POSITIVE\n IRIREF e.g. DECIMAL_POSITIVE\n IRIREF e.g. DOUBLE_POSITIVE\n IRIREF e.g. INTEGER_NEGATIVE\n IRIREF e.g. DECIMAL_NEGATIVE\n IRIREF e.g. DOUBLE_NEGATIVE\n IRIREF e.g. 'TRUE'\n IRIREF e.g. 'FALSE'\n IRIREF e.g. BLANK_NODE_LABEL\n IRIREF e.g. ANON e.g. []\n IRIREF e.g. NIL e.g. ()\n IRIREF e.g. '<<'\n IRIREF e.g. '('\n IRIREF e.g. '['\n PNAME_LN '?'\n PNAME_LN '*'\n PNAME_LN '+'\n PNAME_LN '/'\n PNAME_LN '|'\n PNAME_LN VAR1 e.g. ?foo\n PNAME_LN VAR2 e.g. ?bar\n PNAME_LN IRIREF e.g. \n PNAME_LN PNAME_LN\n PNAME_LN PNAME_NS\n PNAME_LN STRING_LITERAL1\n PNAME_LN STRING_LITERAL2\n PNAME_LN STRING_LITERAL_LONG1\n PNAME_LN STRING_LITERAL_LONG2\n PNAME_LN INTEGER\n PNAME_LN DECIMAL\n PNAME_LN DOUBLE\n PNAME_LN INTEGER_POSITIVE\n PNAME_LN DECIMAL_POSITIVE\n PNAME_LN DOUBLE_POSITIVE\n PNAME_LN INTEGER_NEGATIVE\n PNAME_LN DECIMAL_NEGATIVE\n PNAME_LN DOUBLE_NEGATIVE\n PNAME_LN 'TRUE'\n PNAME_LN 'FALSE'\n PNAME_LN BLANK_NODE_LABEL\n PNAME_LN ANON e.g. []\n PNAME_LN NIL e.g. ()\n PNAME_LN '<<'\n PNAME_LN '('\n PNAME_LN '['\n PNAME_NS '?'\n PNAME_NS '*'\n PNAME_NS '+'\n PNAME_NS '/'\n PNAME_NS '|'\n PNAME_NS VAR1 e.g. ?foo\n PNAME_NS VAR2 e.g. ?bar\n PNAME_NS IRIREF e.g. \n PNAME_NS PNAME_LN\n PNAME_NS PNAME_NS\n PNAME_NS STRING_LITERAL1\n PNAME_NS STRING_LITERAL2\n PNAME_NS STRING_LITERAL_LONG1\n PNAME_NS STRING_LITERAL_LONG2\n PNAME_NS INTEGER\n PNAME_NS DECIMAL\n PNAME_NS DOUBLE\n PNAME_NS INTEGER_POSITIVE\n PNAME_NS DECIMAL_POSITIVE\n PNAME_NS DOUBLE_POSITIVE\n PNAME_NS INTEGER_NEGATIVE\n PNAME_NS DECIMAL_NEGATIVE\n PNAME_NS DOUBLE_NEGATIVE\n PNAME_NS 'TRUE'\n PNAME_NS 'FALSE'\n PNAME_NS BLANK_NODE_LABEL\n PNAME_NS ANON e.g. []\n PNAME_NS NIL e.g. ()\n PNAME_NS '<<'\n PNAME_NS '('\n PNAME_NS '['\n 'a' '?'\n 'a' '*'\n 'a' '+'\n 'a' '/'\n 'a' '|'\n 'a' VAR1 e.g. ?foo\n 'a' VAR2 e.g. ?bar\n 'a' IRIREF e.g. \n 'a' PNAME_LN\n 'a' PNAME_NS\n 'a' STRING_LITERAL1\n 'a' STRING_LITERAL2\n 'a' STRING_LITERAL_LONG1\n 'a' STRING_LITERAL_LONG2\n 'a' INTEGER\n 'a' DECIMAL\n 'a' DOUBLE\n 'a' INTEGER_POSITIVE\n 'a' DECIMAL_POSITIVE\n 'a' DOUBLE_POSITIVE\n 'a' INTEGER_NEGATIVE\n 'a' DECIMAL_NEGATIVE\n 'a' DOUBLE_NEGATIVE\n 'a' 'TRUE'\n 'a' 'FALSE'\n 'a' BLANK_NODE_LABEL\n 'a' ANON e.g. []\n 'a' NIL e.g. ()\n 'a' '<<'\n 'a' '('\n 'a' '['\n VAR1 e.g. ?foo VAR1 e.g. ?foo\n VAR1 e.g. ?foo VAR2 e.g. ?bar\n VAR1 e.g. ?foo IRIREF e.g. \n VAR1 e.g. ?foo PNAME_LN\n VAR1 e.g. ?foo PNAME_NS\n VAR1 e.g. ?foo STRING_LITERAL1\n VAR1 e.g. ?foo STRING_LITERAL2\n VAR1 e.g. ?foo STRING_LITERAL_LONG1\n VAR1 e.g. ?foo STRING_LITERAL_LONG2\n VAR1 e.g. ?foo INTEGER\n VAR1 e.g. ?foo DECIMAL\n VAR1 e.g. ?foo DOUBLE\n VAR1 e.g. ?foo INTEGER_POSITIVE\n VAR1 e.g. ?foo DECIMAL_POSITIVE\n VAR1 e.g. ?foo DOUBLE_POSITIVE\n VAR1 e.g. ?foo INTEGER_NEGATIVE\n VAR1 e.g. ?foo DECIMAL_NEGATIVE\n VAR1 e.g. ?foo DOUBLE_NEGATIVE\n VAR1 e.g. ?foo 'TRUE'\n VAR1 e.g. ?foo 'FALSE'\n VAR1 e.g. ?foo BLANK_NODE_LABEL\n VAR1 e.g. ?foo ANON e.g. []\n VAR1 e.g. ?foo NIL e.g. ()\n VAR1 e.g. ?foo '<<'\n VAR1 e.g. ?foo '('\n VAR1 e.g. ?foo '['\n VAR2 e.g. ?bar VAR1 e.g. ?foo\n VAR2 e.g. ?bar VAR2 e.g. ?bar\n VAR2 e.g. ?bar IRIREF e.g. \n VAR2 e.g. ?bar PNAME_LN\n VAR2 e.g. ?bar PNAME_NS\n VAR2 e.g. ?bar STRING_LITERAL1\n VAR2 e.g. ?bar STRING_LITERAL2\n VAR2 e.g. ?bar STRING_LITERAL_LONG1\n VAR2 e.g. ?bar STRING_LITERAL_LONG2\n VAR2 e.g. ?bar INTEGER\n VAR2 e.g. ?bar DECIMAL\n VAR2 e.g. ?bar DOUBLE\n VAR2 e.g. ?bar INTEGER_POSITIVE\n VAR2 e.g. ?bar DECIMAL_POSITIVE\n VAR2 e.g. ?bar DOUBLE_POSITIVE\n VAR2 e.g. ?bar INTEGER_NEGATIVE\n VAR2 e.g. ?bar DECIMAL_NEGATIVE\n VAR2 e.g. ?bar DOUBLE_NEGATIVE\n VAR2 e.g. ?bar 'TRUE'\n VAR2 e.g. ?bar 'FALSE'\n VAR2 e.g. ?bar BLANK_NODE_LABEL\n VAR2 e.g. ?bar ANON e.g. []\n VAR2 e.g. ?bar NIL e.g. ()\n VAR2 e.g. ?bar '<<'\n VAR2 e.g. ?bar '('\n VAR2 e.g. ?bar '['\n VAR1 e.g. ?foo '{'\n VAR2 e.g. ?bar '{'\n IRIREF e.g. '{'\n PNAME_LN '{'\n PNAME_NS '{'\n 'a' '{'", 51 | range: [ 52 | { 53 | character: 5, 54 | line: 3 55 | }, 56 | { 57 | character: 6, 58 | line: 3 59 | } 60 | ], 61 | severity: "Error", 62 | source: "PropertyListPathNotEmpty" 63 | } 64 | ]); 65 | }); 66 | it("receives hover help from the server", () => __awaiter(void 0, void 0, void 0, function* () { 67 | const hoverHelp = (yield vscode.commands.executeCommand("vscode.executeHoverProvider", docUri, new vscode.Position(0, 0))); 68 | const { contents } = hoverHelp[0]; 69 | const range = hoverHelp[0].range; 70 | chai_1.expect(typeof contents[0] === 'string' ? contents[0] : contents[0].value).to.eql("```\nPrefixDecl\n```"); 71 | chai_1.expect(range.start.line).to.eql(0); 72 | chai_1.expect(range.start.character).to.eql(0); 73 | chai_1.expect(range.end.line).to.eql(0); 74 | chai_1.expect(range.end.character).to.eql(52); 75 | })); 76 | // Note that this test and the one above also test error-tolerance, since 77 | // the language assistance comes after a parse error. 78 | it("receives completion suggestions from the server", () => __awaiter(void 0, void 0, void 0, function* () { 79 | const completions = (yield vscode.commands.executeCommand("vscode.executeCompletionItemProvider", docUri, new vscode.Position(3, 5))); 80 | const normalizedSuggestedCompletion = JSON.parse(JSON.stringify(completions.items[0])); 81 | chai_1.expect(normalizedSuggestedCompletion).to.eql({ 82 | label: "", 83 | kind: "EnumMember", 84 | insertText: "", 85 | sortText: "", 86 | textEdit: { 87 | range: [ 88 | { 89 | line: 3, 90 | character: 5 91 | }, 92 | { 93 | line: 3, 94 | character: 6 95 | } 96 | ], 97 | newText: "" 98 | } 99 | }); 100 | })); 101 | }); 102 | //# sourceMappingURL=extension.test.js.map -------------------------------------------------------------------------------- /vscode-langserver-sparql/out/test/extension.test.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../src/test/extension.test.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /vscode-langserver-sparql/out/test/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | // 3 | // PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING 4 | // 5 | // This file is providing the test runner to use when running extension tests. 6 | // By default the test runner in use is Mocha based. 7 | // 8 | // You can provide your own test runner if you want to override it by exporting 9 | // a function run(testRoot: string, clb: (error:Error) => void) that the extension 10 | // host can call to run the tests. The test runner is expected to use console.log 11 | // to report the results back to the caller. When the tests are finished, return 12 | // a possible error to the callback or null if none. 13 | Object.defineProperty(exports, "__esModule", { value: true }); 14 | const testRunner = require("vscode/lib/testrunner"); 15 | // You can directly control Mocha options by uncommenting the following lines 16 | // See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info 17 | testRunner.configure({ 18 | ui: "bdd", 19 | useColors: true, 20 | timeout: 10000 // allow VSCode and server time to start 21 | }); 22 | module.exports = testRunner; 23 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /vscode-langserver-sparql/out/test/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,mEAAmE;AACnE,EAAE;AACF,8EAA8E;AAC9E,oDAAoD;AACpD,EAAE;AACF,+EAA+E;AAC/E,kFAAkF;AAClF,iFAAiF;AACjF,gFAAgF;AAChF,oDAAoD;;AAEpD,oDAAoD;AAEpD,6EAA6E;AAC7E,mGAAmG;AACnG,UAAU,CAAC,SAAS,CAAC;IACnB,EAAE,EAAE,KAAK;IACT,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,KAAK,CAAC,wCAAwC;CACxD,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC"} -------------------------------------------------------------------------------- /vscode-langserver-sparql/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-langserver-sparql", 3 | "publisher": "stardog-union", 4 | "license": "Apache-2.0", 5 | "displayName": "SPARQL Language Server (with Stardog extensions)", 6 | "description": "Language intelligence (autocomplete, diagnostics, etc.) for SPARQL (W3C + Stardog extensions)", 7 | "version": "0.2.1", 8 | "contributors": [ 9 | { 10 | "name": "Jason Rogers", 11 | "email": "jason@stardog.com" 12 | } 13 | ], 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/stardog-union/stardog-vsc.git" 17 | }, 18 | "bugs": { 19 | "url": "https://github.com/stardog-union/stardog-vsc/issues" 20 | }, 21 | "homepage": "https://github.com/stardog-union/stardog-vsc/vscode-langserver-sparql/#readme", 22 | "engines": { 23 | "vscode": "^1.30.0" 24 | }, 25 | "categories": [ 26 | "Programming Languages", 27 | "Linters", 28 | "Other" 29 | ], 30 | "activationEvents": [ 31 | "onLanguage:sparql" 32 | ], 33 | "main": "./out/extension", 34 | "scripts": { 35 | "vscode:prepublish": "yarn run compile", 36 | "compile": "tsc -p ./", 37 | "watch": "tsc -watch -p ./", 38 | "test": "yarn run compile && node ./out/test/runTest.js" 39 | }, 40 | "devDependencies": { 41 | "@types/chai": "^4.1.7", 42 | "@types/mocha": "^2.2.42", 43 | "@types/node": "^15.12.4", 44 | "chai": "^4.2.0", 45 | "mocha": "^9.0.1", 46 | "tslint": "^5.8.0", 47 | "typescript": "^4.3.4", 48 | "vscode": "^1.1.37", 49 | "vscode-test": "^1.5.2" 50 | }, 51 | "dependencies": { 52 | "sparql-language-server": "^4.1.0", 53 | "vscode-languageclient": "^5.2.1" 54 | }, 55 | "extensionDependencies": [ 56 | "stardog-union.stardog-rdf-grammars" 57 | ] 58 | } 59 | -------------------------------------------------------------------------------- /vscode-langserver-sparql/src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as vscode from "vscode"; 3 | import { 4 | LanguageClient, 5 | LanguageClientOptions, 6 | ServerOptions, 7 | TransportKind, 8 | NodeModule 9 | } from "vscode-languageclient"; 10 | 11 | let client: LanguageClient; 12 | 13 | export function activate(context: vscode.ExtensionContext) { 14 | const server = context.asAbsolutePath( 15 | path.join( 16 | "node_modules", 17 | "sparql-language-server", 18 | "dist", 19 | "cli.js" 20 | ) 21 | ); 22 | const baseServerOptions: NodeModule = { 23 | module: server, 24 | transport: TransportKind.stdio, 25 | args: ["--stdio"] 26 | }; 27 | const serverOptions: ServerOptions = { 28 | run: baseServerOptions, 29 | debug: { 30 | ...baseServerOptions, 31 | // allow attaching VSCode in debug mode: 32 | options: { 33 | execArgv: ["--nolazy", "--inspect=6009"] 34 | } 35 | } 36 | }; 37 | const clientOptions: LanguageClientOptions = { 38 | documentSelector: [ 39 | { 40 | scheme: "file", 41 | language: "sparql" 42 | } 43 | ] 44 | }; 45 | 46 | client = new LanguageClient( 47 | "stardogSparqlLanguageServer", 48 | "Stardog SPARQL Language Server", 49 | serverOptions, 50 | clientOptions 51 | ); 52 | 53 | client.start(); 54 | } 55 | 56 | export function deactivate() { 57 | if (client) { 58 | return client.stop(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /vscode-langserver-sparql/src/test/extension.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from "chai"; 2 | import * as path from "path"; 3 | import * as vscode from "vscode"; 4 | 5 | const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); 6 | 7 | describe("SPARQL Language Server Extension", () => { 8 | let docUri: vscode.Uri; 9 | let document: vscode.TextDocument | null; 10 | 11 | beforeEach(async () => { 12 | const ext = vscode.extensions.getExtension("stardog-union.vscode-langserver-sparql")!; 13 | await ext.activate(); 14 | docUri = vscode.Uri.file( 15 | path.join(__dirname, "..", "..", "fixtures", "bad", "basic-bad-select.sparql") 16 | ); 17 | document = await vscode.workspace.openTextDocument(docUri); 18 | await vscode.window.showTextDocument(document); 19 | await sleep(2000); // let server start 20 | }); 21 | 22 | afterEach(() => { 23 | document = null; 24 | }); 25 | 26 | it("receives error diagnostics from the server", () => { 27 | const receivedDiagnostics = vscode.languages.getDiagnostics(docUri); 28 | const normalizedReceivedDiagnostics = JSON.parse(JSON.stringify(receivedDiagnostics)); 29 | expect(normalizedReceivedDiagnostics).to.eql([ 30 | { 31 | severity: "Error", 32 | message: "'{' expected.", 33 | range: [ 34 | { 35 | line: 2, 36 | character: 19 37 | }, 38 | { 39 | line: 2, 40 | character: 23 41 | } 42 | ], 43 | source: "GroupGraphPattern" 44 | }, 45 | { 46 | message: "\tExpected one of the following:\n '^'\n '!'\n '('\n IRIREF e.g. '?'\n IRIREF e.g. '*'\n IRIREF e.g. '+'\n IRIREF e.g. '/'\n IRIREF e.g. '|'\n IRIREF e.g. VAR1 e.g. ?foo\n IRIREF e.g. VAR2 e.g. ?bar\n IRIREF e.g. IRIREF e.g. \n IRIREF e.g. PNAME_LN\n IRIREF e.g. PNAME_NS\n IRIREF e.g. STRING_LITERAL1\n IRIREF e.g. STRING_LITERAL2\n IRIREF e.g. STRING_LITERAL_LONG1\n IRIREF e.g. STRING_LITERAL_LONG2\n IRIREF e.g. INTEGER\n IRIREF e.g. DECIMAL\n IRIREF e.g. DOUBLE\n IRIREF e.g. INTEGER_POSITIVE\n IRIREF e.g. DECIMAL_POSITIVE\n IRIREF e.g. DOUBLE_POSITIVE\n IRIREF e.g. INTEGER_NEGATIVE\n IRIREF e.g. DECIMAL_NEGATIVE\n IRIREF e.g. DOUBLE_NEGATIVE\n IRIREF e.g. 'TRUE'\n IRIREF e.g. 'FALSE'\n IRIREF e.g. BLANK_NODE_LABEL\n IRIREF e.g. ANON e.g. []\n IRIREF e.g. NIL e.g. ()\n IRIREF e.g. '<<'\n IRIREF e.g. '('\n IRIREF e.g. '['\n PNAME_LN '?'\n PNAME_LN '*'\n PNAME_LN '+'\n PNAME_LN '/'\n PNAME_LN '|'\n PNAME_LN VAR1 e.g. ?foo\n PNAME_LN VAR2 e.g. ?bar\n PNAME_LN IRIREF e.g. \n PNAME_LN PNAME_LN\n PNAME_LN PNAME_NS\n PNAME_LN STRING_LITERAL1\n PNAME_LN STRING_LITERAL2\n PNAME_LN STRING_LITERAL_LONG1\n PNAME_LN STRING_LITERAL_LONG2\n PNAME_LN INTEGER\n PNAME_LN DECIMAL\n PNAME_LN DOUBLE\n PNAME_LN INTEGER_POSITIVE\n PNAME_LN DECIMAL_POSITIVE\n PNAME_LN DOUBLE_POSITIVE\n PNAME_LN INTEGER_NEGATIVE\n PNAME_LN DECIMAL_NEGATIVE\n PNAME_LN DOUBLE_NEGATIVE\n PNAME_LN 'TRUE'\n PNAME_LN 'FALSE'\n PNAME_LN BLANK_NODE_LABEL\n PNAME_LN ANON e.g. []\n PNAME_LN NIL e.g. ()\n PNAME_LN '<<'\n PNAME_LN '('\n PNAME_LN '['\n PNAME_NS '?'\n PNAME_NS '*'\n PNAME_NS '+'\n PNAME_NS '/'\n PNAME_NS '|'\n PNAME_NS VAR1 e.g. ?foo\n PNAME_NS VAR2 e.g. ?bar\n PNAME_NS IRIREF e.g. \n PNAME_NS PNAME_LN\n PNAME_NS PNAME_NS\n PNAME_NS STRING_LITERAL1\n PNAME_NS STRING_LITERAL2\n PNAME_NS STRING_LITERAL_LONG1\n PNAME_NS STRING_LITERAL_LONG2\n PNAME_NS INTEGER\n PNAME_NS DECIMAL\n PNAME_NS DOUBLE\n PNAME_NS INTEGER_POSITIVE\n PNAME_NS DECIMAL_POSITIVE\n PNAME_NS DOUBLE_POSITIVE\n PNAME_NS INTEGER_NEGATIVE\n PNAME_NS DECIMAL_NEGATIVE\n PNAME_NS DOUBLE_NEGATIVE\n PNAME_NS 'TRUE'\n PNAME_NS 'FALSE'\n PNAME_NS BLANK_NODE_LABEL\n PNAME_NS ANON e.g. []\n PNAME_NS NIL e.g. ()\n PNAME_NS '<<'\n PNAME_NS '('\n PNAME_NS '['\n 'a' '?'\n 'a' '*'\n 'a' '+'\n 'a' '/'\n 'a' '|'\n 'a' VAR1 e.g. ?foo\n 'a' VAR2 e.g. ?bar\n 'a' IRIREF e.g. \n 'a' PNAME_LN\n 'a' PNAME_NS\n 'a' STRING_LITERAL1\n 'a' STRING_LITERAL2\n 'a' STRING_LITERAL_LONG1\n 'a' STRING_LITERAL_LONG2\n 'a' INTEGER\n 'a' DECIMAL\n 'a' DOUBLE\n 'a' INTEGER_POSITIVE\n 'a' DECIMAL_POSITIVE\n 'a' DOUBLE_POSITIVE\n 'a' INTEGER_NEGATIVE\n 'a' DECIMAL_NEGATIVE\n 'a' DOUBLE_NEGATIVE\n 'a' 'TRUE'\n 'a' 'FALSE'\n 'a' BLANK_NODE_LABEL\n 'a' ANON e.g. []\n 'a' NIL e.g. ()\n 'a' '<<'\n 'a' '('\n 'a' '['\n VAR1 e.g. ?foo VAR1 e.g. ?foo\n VAR1 e.g. ?foo VAR2 e.g. ?bar\n VAR1 e.g. ?foo IRIREF e.g. \n VAR1 e.g. ?foo PNAME_LN\n VAR1 e.g. ?foo PNAME_NS\n VAR1 e.g. ?foo STRING_LITERAL1\n VAR1 e.g. ?foo STRING_LITERAL2\n VAR1 e.g. ?foo STRING_LITERAL_LONG1\n VAR1 e.g. ?foo STRING_LITERAL_LONG2\n VAR1 e.g. ?foo INTEGER\n VAR1 e.g. ?foo DECIMAL\n VAR1 e.g. ?foo DOUBLE\n VAR1 e.g. ?foo INTEGER_POSITIVE\n VAR1 e.g. ?foo DECIMAL_POSITIVE\n VAR1 e.g. ?foo DOUBLE_POSITIVE\n VAR1 e.g. ?foo INTEGER_NEGATIVE\n VAR1 e.g. ?foo DECIMAL_NEGATIVE\n VAR1 e.g. ?foo DOUBLE_NEGATIVE\n VAR1 e.g. ?foo 'TRUE'\n VAR1 e.g. ?foo 'FALSE'\n VAR1 e.g. ?foo BLANK_NODE_LABEL\n VAR1 e.g. ?foo ANON e.g. []\n VAR1 e.g. ?foo NIL e.g. ()\n VAR1 e.g. ?foo '<<'\n VAR1 e.g. ?foo '('\n VAR1 e.g. ?foo '['\n VAR2 e.g. ?bar VAR1 e.g. ?foo\n VAR2 e.g. ?bar VAR2 e.g. ?bar\n VAR2 e.g. ?bar IRIREF e.g. \n VAR2 e.g. ?bar PNAME_LN\n VAR2 e.g. ?bar PNAME_NS\n VAR2 e.g. ?bar STRING_LITERAL1\n VAR2 e.g. ?bar STRING_LITERAL2\n VAR2 e.g. ?bar STRING_LITERAL_LONG1\n VAR2 e.g. ?bar STRING_LITERAL_LONG2\n VAR2 e.g. ?bar INTEGER\n VAR2 e.g. ?bar DECIMAL\n VAR2 e.g. ?bar DOUBLE\n VAR2 e.g. ?bar INTEGER_POSITIVE\n VAR2 e.g. ?bar DECIMAL_POSITIVE\n VAR2 e.g. ?bar DOUBLE_POSITIVE\n VAR2 e.g. ?bar INTEGER_NEGATIVE\n VAR2 e.g. ?bar DECIMAL_NEGATIVE\n VAR2 e.g. ?bar DOUBLE_NEGATIVE\n VAR2 e.g. ?bar 'TRUE'\n VAR2 e.g. ?bar 'FALSE'\n VAR2 e.g. ?bar BLANK_NODE_LABEL\n VAR2 e.g. ?bar ANON e.g. []\n VAR2 e.g. ?bar NIL e.g. ()\n VAR2 e.g. ?bar '<<'\n VAR2 e.g. ?bar '('\n VAR2 e.g. ?bar '['\n VAR1 e.g. ?foo '{'\n VAR2 e.g. ?bar '{'\n IRIREF e.g. '{'\n PNAME_LN '{'\n PNAME_NS '{'\n 'a' '{'", 47 | range: [ 48 | { 49 | character: 5, 50 | line: 3 51 | }, 52 | { 53 | character: 6, 54 | line: 3 55 | } 56 | ], 57 | severity: "Error", 58 | source: "PropertyListPathNotEmpty" 59 | } 60 | ]); 61 | }); 62 | 63 | it("receives hover help from the server", async () => { 64 | const hoverHelp = (await vscode.commands.executeCommand( 65 | "vscode.executeHoverProvider", 66 | docUri, 67 | new vscode.Position(0, 0) 68 | )) as vscode.Hover[]; 69 | const { contents } = hoverHelp[0]; 70 | const range = hoverHelp[0].range as vscode.Range; 71 | expect(typeof contents[0] === 'string' ? contents[0] : contents[0].value).to.eql("```\nPrefixDecl\n```"); 72 | expect(range.start.line).to.eql(0); 73 | expect(range.start.character).to.eql(0); 74 | expect(range.end.line).to.eql(0); 75 | expect(range.end.character).to.eql(52); 76 | }); 77 | 78 | // Note that this test and the one above also test error-tolerance, since 79 | // the language assistance comes after a parse error. 80 | it("receives completion suggestions from the server", async () => { 81 | const completions = (await vscode.commands.executeCommand( 82 | "vscode.executeCompletionItemProvider", 83 | docUri, 84 | new vscode.Position(3, 5) 85 | )) as vscode.CompletionList; 86 | const normalizedSuggestedCompletion = JSON.parse(JSON.stringify(completions.items[0])); 87 | expect(normalizedSuggestedCompletion).to.eql({ 88 | label: "", 89 | kind: "EnumMember", 90 | insertText: "", 91 | sortText: "", 92 | textEdit: { 93 | range: [ 94 | { 95 | line: 3, 96 | character: 5 97 | }, 98 | { 99 | line: 3, 100 | character: 6 101 | } 102 | ], 103 | newText: "" 104 | } 105 | }); 106 | }); 107 | }); 108 | -------------------------------------------------------------------------------- /vscode-langserver-sparql/src/test/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as Mocha from "mocha"; 3 | 4 | export function run(): Promise { 5 | const mocha = new Mocha({ 6 | // @ts-ignore: Mocha types are missing `color` 7 | color: true, 8 | ui: "bdd", 9 | timeout: 5000, 10 | }); 11 | 12 | return new Promise((c, e) => { 13 | mocha.addFile(path.resolve(__dirname, "extension.test.js")); 14 | 15 | try { 16 | mocha.run((failures) => { 17 | if (failures > 0) { 18 | e(new Error(`${failures} tests failed.`)); 19 | } else { 20 | c(); 21 | } 22 | }); 23 | } catch (err) { 24 | e(err); 25 | } 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /vscode-langserver-sparql/src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import { downloadAndUnzipVSCode, runTests } from "vscode-test"; 3 | 4 | async function main() { 5 | try { 6 | const extensionDevelopmentPath = path.resolve(__dirname, "../../../"); 7 | const extensionTestsPath = path.resolve(__dirname, "./index"); 8 | const vscodeExecutablePath = await downloadAndUnzipVSCode(); 9 | 10 | // Run the extension test 11 | await runTests({ 12 | launchArgs: ["--disable-gpu", "--disable-extensions"], 13 | // Use the specified `code` executable 14 | vscodeExecutablePath, 15 | // @ts-ignore: vscode-test types aren't right 16 | extensionDevelopmentPath, 17 | extensionTestsPath, 18 | }); 19 | } catch (err) { 20 | console.error("Failed to run tests"); 21 | process.exit(1); 22 | } 23 | } 24 | 25 | main(); 26 | -------------------------------------------------------------------------------- /vscode-langserver-sparql/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": ["es6"], 7 | "sourceMap": true, 8 | "rootDir": "src", 9 | "strict": true, 10 | "noUnusedLocals": true 11 | }, 12 | "exclude": ["node_modules", ".vscode-test"] 13 | } 14 | -------------------------------------------------------------------------------- /vscode-langserver-sparql/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-string-throw": true, 4 | "no-unused-expression": true, 5 | "no-duplicate-variable": true, 6 | "curly": true, 7 | "class-name": true, 8 | "semicolon": [true, "always"], 9 | "triple-equals": true 10 | }, 11 | "defaultSeverity": "warning" 12 | } 13 | -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable changes to the "vscode-langserver-sparql" extension will be documented in this file. 3 | 4 | ## [1.1.0] 5 | - Change testing paradigm to fix tests on CI 6 | - Make GraphQL.vscode-graphql a direct dependency 7 | - Add "stardog-graphql" language/grammar to extension 8 | 9 | ## [1.0.0] 10 | - Add Stardog-specific directives and arguments 11 | 12 | ## [0.0.1] 13 | - Initial release -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/README.md: -------------------------------------------------------------------------------- 1 | # vscode-langserver-stardog-graphql 2 | 3 | A Visual Studio Code extension providing language intelligence (autocomplete, 4 | diagnostics, hover tooltips, etc.) for [GraphQL](https://graphql.github.io/) with 5 | Stardog extensions (especially for use with [Stardog](https://www.stardog.com/)) via the 6 | Language Server Protocol. 7 | 8 | ## Features 9 | 10 | - Autocompletion for GraphQL directives, especially those specific to Stardog 11 | - Diagnostics (error hints) 12 | - Hover tooltips (identifies entities in GraphQL grammar and shows "expected" 13 | symbols in the case of an error) 14 | - Open source 15 | - No arbitrary code execution 16 | - Powers some of the core language intelligence capabilities of [Stardog Studio](https://www.stardog.com/studio/) 17 | 18 | ## License 19 | 20 | Apache-2.0 21 | -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/fixtures/bad/basic-bad-graphql.graphql: -------------------------------------------------------------------------------- 1 | { 2 | Human @bind() { 3 | - 4 | } 5 | } -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/fixtures/good/basic-good-graphql.graphql: -------------------------------------------------------------------------------- 1 | query MyQuery @prefix(test: "test") { 2 | test_Something { 3 | name @optional 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | "lineComment": "#", 4 | "blockComment": ["\"\"\"", "\"\"\""] 5 | }, 6 | "brackets": [ 7 | ["{", "}"], 8 | ["[", "]"], 9 | ["(", ")"] 10 | ], 11 | "autoClosingPairs": [ 12 | ["{", "}"], 13 | ["[", "]"], 14 | ["(", ")"], 15 | { "open": "\"", "close": "\"", "notIn": ["string", "comment"] }, 16 | ["'", "'"] 17 | ], 18 | "surroundingPairs": [ 19 | ["{", "}"], 20 | ["[", "]"], 21 | ["(", ")"], 22 | ["\"", "\""], 23 | ["'", "'"] 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/out/extension.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.deactivate = exports.activate = void 0; 4 | const path = require("path"); 5 | const vscode_languageclient_1 = require("vscode-languageclient"); 6 | let client; 7 | function activate(context) { 8 | const server = context.asAbsolutePath(path.join("node_modules", "stardog-graphql-language-server", "dist", "cli.js")); 9 | const baseServerOptions = { 10 | module: server, 11 | transport: vscode_languageclient_1.TransportKind.stdio, 12 | args: ["--stdio"] 13 | }; 14 | const serverOptions = { 15 | run: baseServerOptions, 16 | debug: Object.assign(Object.assign({}, baseServerOptions), { 17 | // allow attaching VSCode in debug mode: 18 | options: { 19 | execArgv: ["--nolazy", "--inspect=6009"] 20 | } }) 21 | }; 22 | const clientOptions = { 23 | documentSelector: [ 24 | { 25 | scheme: "file", 26 | language: "graphql" 27 | }, 28 | { 29 | scheme: "file", 30 | language: "stardog-graphql" 31 | } 32 | ] 33 | }; 34 | client = new vscode_languageclient_1.LanguageClient("stardogGraphQlLanguageServer", "Stardog GraphQL Language Server", serverOptions, clientOptions); 35 | client.start(); 36 | } 37 | exports.activate = activate; 38 | function deactivate() { 39 | if (client) { 40 | return client.stop(); 41 | } 42 | } 43 | exports.deactivate = deactivate; 44 | //# sourceMappingURL=extension.js.map -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/out/extension.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAE7B,iEAM+B;AAE/B,IAAI,MAAsB,CAAC;AAE3B,SAAgB,QAAQ,CAAC,OAAgC;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CACnC,IAAI,CAAC,IAAI,CACP,cAAc,EACd,iCAAiC,EACjC,MAAM,EACN,QAAQ,CACT,CACF,CAAC;IACF,MAAM,iBAAiB,GAAe;QACpC,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,qCAAa,CAAC,KAAK;QAC9B,IAAI,EAAE,CAAC,SAAS,CAAC;KAClB,CAAC;IACF,MAAM,aAAa,GAAkB;QACnC,GAAG,EAAE,iBAAiB;QACtB,KAAK,kCACA,iBAAiB;YACpB,wCAAwC;YACxC,OAAO,EAAE;gBACP,QAAQ,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;aACzC,GACF;KACF,CAAC;IACF,MAAM,aAAa,GAA0B;QAC3C,gBAAgB,EAAE;YAChB;gBACE,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,SAAS;aACpB;YACD;gBACE,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,iBAAiB;aAC5B;SACF;KACF,CAAC;IAEF,MAAM,GAAG,IAAI,sCAAc,CACzB,8BAA8B,EAC9B,iCAAiC,EACjC,aAAa,EACb,aAAa,CACd,CAAC;IAEF,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AA7CD,4BA6CC;AAED,SAAgB,UAAU;IACxB,IAAI,MAAM,EAAE;QACV,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;KACtB;AACH,CAAC;AAJD,gCAIC"} -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/out/test/extension.test.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | const chai_1 = require("chai"); 13 | const path = require("path"); 14 | const vscode = require("vscode"); 15 | const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); 16 | describe("Stardog GraphQL Language Server Extension", () => { 17 | let docUri; 18 | let document; 19 | beforeEach(() => __awaiter(void 0, void 0, void 0, function* () { 20 | const ext = vscode.extensions.getExtension("stardog-union.vscode-langserver-stardog-graphql"); 21 | yield ext.activate(); 22 | docUri = vscode.Uri.file(path.join(__dirname, "..", "..", "fixtures", "bad", "basic-bad-graphql.graphql")); 23 | document = yield vscode.workspace.openTextDocument(docUri); 24 | yield vscode.window.showTextDocument(document); 25 | yield sleep(2000); // let server start 26 | })); 27 | afterEach(() => { 28 | document = null; 29 | }); 30 | it("receives error diagnostics from the server", () => { 31 | const receivedDiagnostics = vscode.languages.getDiagnostics(docUri); 32 | const normalizedReceivedDiagnostics = JSON.parse(JSON.stringify(receivedDiagnostics)); 33 | chai_1.expect(normalizedReceivedDiagnostics).to.eql([ 34 | { 35 | severity: "Error", 36 | message: "\tExpected one of the following:\n Name", 37 | range: [ 38 | { 39 | line: 1, 40 | character: 14 41 | }, 42 | { 43 | line: 1, 44 | character: 15 45 | } 46 | ], 47 | source: "Arguments", 48 | }, 49 | { 50 | severity: "Error", 51 | message: "\tExpected one of the following:\n Name\n '...'", 52 | range: [ 53 | { 54 | line: 3, 55 | character: 2 56 | }, 57 | { 58 | line: 3, 59 | character: 3 60 | } 61 | ], 62 | source: "SelectionSet" 63 | }, 64 | { 65 | severity: "Error", 66 | message: "Expected EOF.", 67 | range: [ 68 | { 69 | line: 4, 70 | character: 0 71 | }, 72 | { 73 | line: 4, 74 | character: 1 75 | } 76 | ] 77 | }, 78 | { 79 | message: "The bind directive requires 1 argument (valid arguments: `to`)", 80 | range: [ 81 | { 82 | character: 9, 83 | line: 1, 84 | }, 85 | { 86 | character: 13, 87 | line: 1, 88 | } 89 | ], 90 | severity: "Error", 91 | } 92 | ]); 93 | }); 94 | it("receives hover help from the server", () => __awaiter(void 0, void 0, void 0, function* () { 95 | docUri = vscode.Uri.file(path.join(__dirname, "..", "..", "fixtures", "good", "basic-good-graphql.graphql")); 96 | document = yield vscode.workspace.openTextDocument(docUri); 97 | yield vscode.window.showTextDocument(document); 98 | yield sleep(2000); // let server start 99 | const hoverHelp = (yield vscode.commands.executeCommand("vscode.executeHoverProvider", docUri, new vscode.Position(0, 19))); 100 | const { contents } = hoverHelp[0]; 101 | const range = hoverHelp[0].range; 102 | chai_1.expect(typeof contents[0] === 'string' ? contents[0] : contents[0].value).to.eql("```\nDirective\n```"); 103 | chai_1.expect(range.start.line).to.eql(0); 104 | chai_1.expect(range.start.character).to.eql(14); 105 | chai_1.expect(range.end.line).to.eql(0); 106 | chai_1.expect(range.end.character).to.eql(35); 107 | })); 108 | // Note that this test and the one above also test error-tolerance, since 109 | // the language assistance comes after a parse error. 110 | it("receives completion suggestions from the server", () => __awaiter(void 0, void 0, void 0, function* () { 111 | const completions = (yield vscode.commands.executeCommand("vscode.executeCompletionItemProvider", docUri, new vscode.Position(1, 14))); 112 | const normalizedSuggestedCompletion = JSON.parse(JSON.stringify(completions.items)); 113 | chai_1.expect(normalizedSuggestedCompletion).to.eql([ 114 | { 115 | label: "to", 116 | kind: "EnumMember", 117 | insertText: "to", 118 | sortText: "to", 119 | textEdit: { 120 | range: [ 121 | { 122 | line: 1, 123 | character: 14 124 | }, 125 | { 126 | line: 1, 127 | character: 14 128 | } 129 | ], 130 | newText: "to" 131 | } 132 | } 133 | ]); 134 | })); 135 | }); 136 | //# sourceMappingURL=extension.test.js.map -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/out/test/extension.test.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../src/test/extension.test.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/out/test/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.run = void 0; 4 | const path = require("path"); 5 | const Mocha = require("mocha"); 6 | function run() { 7 | const mocha = new Mocha({ 8 | // @ts-ignore: Mocha types are missing `color` 9 | color: true, 10 | ui: "bdd", 11 | timeout: 5000, 12 | }); 13 | return new Promise((c, e) => { 14 | mocha.addFile(path.resolve(__dirname, "extension.test.js")); 15 | try { 16 | mocha.run((failures) => { 17 | if (failures > 0) { 18 | e(new Error(`${failures} tests failed.`)); 19 | } 20 | else { 21 | c(); 22 | } 23 | }); 24 | } 25 | catch (err) { 26 | e(err); 27 | } 28 | }); 29 | } 30 | exports.run = run; 31 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/out/test/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAC7B,+BAA+B;AAE/B,SAAgB,GAAG;IACjB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,8CAA8C;QAC9C,KAAK,EAAE,IAAI;QACX,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAE5D,IAAI;YACF,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACrB,IAAI,QAAQ,GAAG,CAAC,EAAE;oBAChB,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,QAAQ,gBAAgB,CAAC,CAAC,CAAC;iBAC3C;qBAAM;oBACL,CAAC,EAAE,CAAC;iBACL;YACH,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,CAAC,CAAC,GAAG,CAAC,CAAC;SACR;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAvBD,kBAuBC"} -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/out/test/runTest.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | const cp = require("child_process"); 13 | const path = require("path"); 14 | const vscode_test_1 = require("vscode-test"); 15 | function main() { 16 | return __awaiter(this, void 0, void 0, function* () { 17 | try { 18 | const extensionDevelopmentPath = path.resolve(__dirname, "../../"); 19 | const extensionTestsPath = path.resolve(__dirname, "./index"); 20 | const vscodeExecutablePath = yield vscode_test_1.downloadAndUnzipVSCode(); 21 | const cliPath = vscode_test_1.resolveCliPathFromVSCodeExecutablePath(vscodeExecutablePath); 22 | // Use cp.spawn / cp.exec for custom setup 23 | cp.spawnSync(cliPath, ["--disable-extensions", "--install-extension", "GraphQL.vscode-graphql", "--force"], { 24 | encoding: "utf-8", 25 | stdio: "inherit", 26 | }); 27 | // Run the extension test 28 | yield vscode_test_1.runTests({ 29 | // Use the specified `code` executable 30 | vscodeExecutablePath, 31 | // @ts-ignore: vscode-test types aren't right 32 | extensionDevelopmentPath, 33 | extensionTestsPath, 34 | }); 35 | } 36 | catch (err) { 37 | console.error("Failed to run tests"); 38 | process.exit(1); 39 | } 40 | }); 41 | } 42 | main(); 43 | //# sourceMappingURL=runTest.js.map -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/out/test/runTest.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"runTest.js","sourceRoot":"","sources":["../../src/test/runTest.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,oCAAoC;AACpC,6BAA6B;AAC7B,6CAIqB;AAErB,SAAe,IAAI;;QACjB,IAAI;YACF,MAAM,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACnE,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9D,MAAM,oBAAoB,GAAG,MAAM,oCAAsB,EAAE,CAAC;YAC5D,MAAM,OAAO,GAAG,oDAAsC,CAAC,oBAAoB,CAAC,CAAC;YAE7E,0CAA0C;YAC1C,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,sBAAsB,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,SAAS,CAAC,EAAE;gBAC1G,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;YAEH,yBAAyB;YACzB,MAAM,sBAAQ,CAAC;gBACb,sCAAsC;gBACtC,oBAAoB;gBACpB,6CAA6C;gBAC7C,wBAAwB;gBACxB,kBAAkB;aACnB,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;IACH,CAAC;CAAA;AAED,IAAI,EAAE,CAAC"} -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-langserver-stardog-graphql", 3 | "publisher": "stardog-union", 4 | "license": "Apache-2.0", 5 | "displayName": "GraphQL Language Server (with Stardog extensions)", 6 | "description": "Language intelligence (autocomplete, diagnostics, etc.) for GraphQL (with Stardog extensions)", 7 | "version": "1.1.0", 8 | "contributors": [ 9 | { 10 | "name": "Jason Rogers", 11 | "email": "jason@stardog.com" 12 | } 13 | ], 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/stardog-union/stardog-vsc.git" 17 | }, 18 | "bugs": { 19 | "url": "https://github.com/stardog-union/stardog-vsc/issues" 20 | }, 21 | "homepage": "https://github.com/stardog-union/stardog-vsc/vscode-langserver-stardog-graphql/#readme", 22 | "engines": { 23 | "vscode": "^1.30.0" 24 | }, 25 | "categories": [ 26 | "Programming Languages", 27 | "Linters", 28 | "Other" 29 | ], 30 | "contributes": { 31 | "languages": [ 32 | { 33 | "id": "stardog-graphql", 34 | "aliases": [ 35 | "GraphQL", 36 | "graphql", 37 | "Stardog GraphQL" 38 | ], 39 | "extensions": [ 40 | ".gql", 41 | ".graphql", 42 | ".stardog-graphql" 43 | ], 44 | "configuration": "./language-configuration.json" 45 | } 46 | ], 47 | "grammars": [ 48 | { 49 | "language": "stardog-graphql", 50 | "scopeName": "source.stardog-graphql", 51 | "path": "./stardog-graphql.tmLanguage.json" 52 | } 53 | ] 54 | }, 55 | "activationEvents": [ 56 | "onLanguage:graphql", 57 | "onLanguage:stardog-graphql" 58 | ], 59 | "main": "./out/extension", 60 | "scripts": { 61 | "vscode:prepublish": "yarn run compile", 62 | "compile": "tsc -p ./", 63 | "watch": "tsc -watch -p ./", 64 | "test": "yarn run compile && node ./out/test/runTest.js" 65 | }, 66 | "devDependencies": { 67 | "@types/chai": "^4.1.7", 68 | "@types/mocha": "^2.2.42", 69 | "@types/node": "^15.12.4", 70 | "chai": "^4.2.0", 71 | "mocha": "^9.0.1", 72 | "tslint": "^5.8.0", 73 | "typescript": "^4.3.4", 74 | "vscode": "^1.1.37", 75 | "vscode-test": "^1.5.2" 76 | }, 77 | "dependencies": { 78 | "stardog-graphql-language-server": "^2.1.0", 79 | "vscode-languageclient": "^5.2.1" 80 | }, 81 | "extensionDependencies": [ 82 | "GraphQL.vscode-graphql" 83 | ] 84 | } 85 | -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as vscode from "vscode"; 3 | import { 4 | LanguageClient, 5 | LanguageClientOptions, 6 | ServerOptions, 7 | TransportKind, 8 | NodeModule 9 | } from "vscode-languageclient"; 10 | 11 | let client: LanguageClient; 12 | 13 | export function activate(context: vscode.ExtensionContext) { 14 | const server = context.asAbsolutePath( 15 | path.join( 16 | "node_modules", 17 | "stardog-graphql-language-server", 18 | "dist", 19 | "cli.js" 20 | ) 21 | ); 22 | const baseServerOptions: NodeModule = { 23 | module: server, 24 | transport: TransportKind.stdio, 25 | args: ["--stdio"] 26 | }; 27 | const serverOptions: ServerOptions = { 28 | run: baseServerOptions, 29 | debug: { 30 | ...baseServerOptions, 31 | // allow attaching VSCode in debug mode: 32 | options: { 33 | execArgv: ["--nolazy", "--inspect=6009"] 34 | } 35 | } 36 | }; 37 | const clientOptions: LanguageClientOptions = { 38 | documentSelector: [ 39 | { 40 | scheme: "file", 41 | language: "graphql" 42 | }, 43 | { 44 | scheme: "file", 45 | language: "stardog-graphql" 46 | } 47 | ] 48 | }; 49 | 50 | client = new LanguageClient( 51 | "stardogGraphQlLanguageServer", 52 | "Stardog GraphQL Language Server", 53 | serverOptions, 54 | clientOptions 55 | ); 56 | 57 | client.start(); 58 | } 59 | 60 | export function deactivate() { 61 | if (client) { 62 | return client.stop(); 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/src/test/extension.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from "chai"; 2 | import * as path from "path"; 3 | import * as vscode from "vscode"; 4 | 5 | const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); 6 | 7 | describe("Stardog GraphQL Language Server Extension", () => { 8 | let docUri: vscode.Uri; 9 | let document: vscode.TextDocument | null; 10 | 11 | beforeEach(async () => { 12 | const ext = vscode.extensions.getExtension("stardog-union.vscode-langserver-stardog-graphql")!; 13 | await ext.activate(); 14 | docUri = vscode.Uri.file( 15 | path.join(__dirname, "..", "..", "fixtures", "bad", "basic-bad-graphql.graphql") 16 | ); 17 | document = await vscode.workspace.openTextDocument(docUri); 18 | await vscode.window.showTextDocument(document); 19 | await sleep(2000); // let server start 20 | }); 21 | 22 | afterEach(() => { 23 | document = null; 24 | }); 25 | 26 | it("receives error diagnostics from the server", () => { 27 | const receivedDiagnostics = vscode.languages.getDiagnostics(docUri); 28 | const normalizedReceivedDiagnostics = JSON.parse(JSON.stringify(receivedDiagnostics)); 29 | expect(normalizedReceivedDiagnostics).to.eql([ 30 | { 31 | severity: "Error", 32 | message: "\tExpected one of the following:\n Name", 33 | range: [ 34 | { 35 | line: 1, 36 | character: 14 37 | }, 38 | { 39 | line: 1, 40 | character: 15 41 | } 42 | ], 43 | source: "Arguments", 44 | }, 45 | { 46 | severity: "Error", 47 | message: "\tExpected one of the following:\n Name\n '...'", 48 | range: [ 49 | { 50 | line: 3, 51 | character: 2 52 | }, 53 | { 54 | line: 3, 55 | character: 3 56 | } 57 | ], 58 | source: "SelectionSet" 59 | }, 60 | { 61 | severity: "Error", 62 | message: "Expected EOF.", 63 | range: [ 64 | { 65 | line: 4, 66 | character: 0 67 | }, 68 | { 69 | line: 4, 70 | character: 1 71 | } 72 | ] 73 | }, 74 | { 75 | message: "The bind directive requires 1 argument (valid arguments: `to`)", 76 | range: [ 77 | { 78 | character: 9, 79 | line: 1, 80 | }, 81 | { 82 | character: 13, 83 | line: 1, 84 | } 85 | ], 86 | severity: "Error", 87 | } 88 | ]); 89 | }); 90 | 91 | it("receives hover help from the server", async () => { 92 | docUri = vscode.Uri.file( 93 | path.join(__dirname, "..", "..", "fixtures", "good", "basic-good-graphql.graphql") 94 | ); 95 | document = await vscode.workspace.openTextDocument(docUri); 96 | await vscode.window.showTextDocument(document); 97 | await sleep(2000); // let server start 98 | const hoverHelp = (await vscode.commands.executeCommand( 99 | "vscode.executeHoverProvider", 100 | docUri, 101 | new vscode.Position(0, 19) 102 | )) as vscode.Hover[]; 103 | const { contents } = hoverHelp[0]; 104 | const range = hoverHelp[0].range as vscode.Range; 105 | expect(typeof contents[0] === 'string' ? contents[0] : contents[0].value).to.eql("```\nDirective\n```"); 106 | expect(range.start.line).to.eql(0); 107 | expect(range.start.character).to.eql(14); 108 | expect(range.end.line).to.eql(0); 109 | expect(range.end.character).to.eql(35); 110 | }); 111 | 112 | // Note that this test and the one above also test error-tolerance, since 113 | // the language assistance comes after a parse error. 114 | it("receives completion suggestions from the server", async () => { 115 | const completions = (await vscode.commands.executeCommand( 116 | "vscode.executeCompletionItemProvider", 117 | docUri, 118 | new vscode.Position(1, 14) 119 | )) as vscode.CompletionList; 120 | const normalizedSuggestedCompletion = JSON.parse(JSON.stringify(completions.items)); 121 | expect(normalizedSuggestedCompletion).to.eql([ 122 | { 123 | label: "to", 124 | kind: "EnumMember", 125 | insertText: "to", 126 | sortText: "to", 127 | textEdit: { 128 | range: [ 129 | { 130 | line: 1, 131 | character: 14 132 | }, 133 | { 134 | line: 1, 135 | character: 14 136 | } 137 | ], 138 | newText: "to" 139 | } 140 | } 141 | ]); 142 | }); 143 | }); 144 | -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/src/test/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as Mocha from "mocha"; 3 | 4 | export function run(): Promise { 5 | const mocha = new Mocha({ 6 | // @ts-ignore: Mocha types are missing `color` 7 | color: true, 8 | ui: "bdd", 9 | timeout: 5000, 10 | }); 11 | 12 | return new Promise((c, e) => { 13 | mocha.addFile(path.resolve(__dirname, "extension.test.js")); 14 | 15 | try { 16 | mocha.run((failures) => { 17 | if (failures > 0) { 18 | e(new Error(`${failures} tests failed.`)); 19 | } else { 20 | c(); 21 | } 22 | }); 23 | } catch (err) { 24 | e(err); 25 | } 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import { downloadAndUnzipVSCode, runTests } from "vscode-test"; 3 | 4 | async function main() { 5 | try { 6 | const extensionDevelopmentPath = path.resolve(__dirname, "../../../"); 7 | const extensionTestsPath = path.resolve(__dirname, "./index"); 8 | const vscodeExecutablePath = await downloadAndUnzipVSCode(); 9 | 10 | // Run the extension test 11 | await runTests({ 12 | launchArgs: [ 13 | "--disable-gpu", 14 | "--disable-extensions", 15 | "--install-extension GraphQL.vscode-graphql", 16 | "--force", 17 | ], 18 | // Use the specified `code` executable 19 | vscodeExecutablePath, 20 | // @ts-ignore: vscode-test types aren't right 21 | extensionDevelopmentPath, 22 | extensionTestsPath, 23 | }); 24 | } catch (err) { 25 | console.error("Failed to run tests"); 26 | process.exit(1); 27 | } 28 | } 29 | 30 | main(); 31 | -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/stardog-graphql.tmLanguage.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Stardog GraphQL", 3 | "scopeName": "source.stardog-graphql", 4 | "fileTypes": [ 5 | "gql", 6 | "graphql", 7 | "stardog-graphql" 8 | ], 9 | "patterns": [ 10 | { "include": "source.graphql" } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": ["es6"], 7 | "sourceMap": true, 8 | "rootDir": "src", 9 | "strict": true, 10 | "skipLibCheck": true, 11 | "noUnusedLocals": true 12 | }, 13 | "exclude": ["node_modules", ".vscode-test"] 14 | } 15 | -------------------------------------------------------------------------------- /vscode-langserver-stardog-graphql/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-string-throw": true, 4 | "no-unused-expression": true, 5 | "no-duplicate-variable": true, 6 | "curly": true, 7 | "class-name": true, 8 | "semicolon": [true, "always"], 9 | "triple-equals": true 10 | }, 11 | "defaultSeverity": "warning" 12 | } 13 | -------------------------------------------------------------------------------- /vscode-langserver-trig/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable changes to the "vscode-langserver-trig" extension will be documented in this file. 3 | 4 | ## [0.0.1] 5 | - Initial release -------------------------------------------------------------------------------- /vscode-langserver-trig/README.md: -------------------------------------------------------------------------------- 1 | # vscode-langserver-trig 2 | 3 | A Visual Studio Code extension providing language intelligence (diagnostics, 4 | hover tooltips, etc.) for the W3C standard [TriG RDF syntax](https://www.w3.org/TR/trig/) via the Language 5 | Server Protocol. 6 | 7 | ## Features 8 | 9 | - Diagnostics (error hints) 10 | - Hover tooltips (identifies entities in TriG grammar and shows "expected" 11 | symbols in the case of an error) 12 | - Syntax highlighting (via the `stardog-rdf-grammars` extension) 13 | - Open source 14 | - No arbitrary code execution 15 | - Powers some of the core language intelligence capabilities of [Stardog Studio](https://www.stardog.com/studio/) 16 | 17 | ## License 18 | 19 | Apache-2.0 20 | -------------------------------------------------------------------------------- /vscode-langserver-trig/fixtures/bad/basic-bad-trig.trig: -------------------------------------------------------------------------------- 1 | graph { 2 | some:Turtle a :Thing/ 3 | } 4 | -------------------------------------------------------------------------------- /vscode-langserver-trig/out/extension.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.deactivate = exports.activate = void 0; 4 | const path = require("path"); 5 | const vscode_languageclient_1 = require("vscode-languageclient"); 6 | let client; 7 | function activate(context) { 8 | const server = context.asAbsolutePath(path.join("node_modules", "trig-language-server", "dist", "cli.js")); 9 | const baseServerOptions = { 10 | module: server, 11 | transport: vscode_languageclient_1.TransportKind.stdio, 12 | args: ["--stdio"] 13 | }; 14 | const serverOptions = { 15 | run: baseServerOptions, 16 | debug: Object.assign(Object.assign({}, baseServerOptions), { 17 | // allow attaching VSCode in debug mode: 18 | options: { 19 | execArgv: ["--nolazy", "--inspect=6009"] 20 | } }) 21 | }; 22 | const clientOptions = { 23 | documentSelector: [ 24 | { 25 | scheme: "file", 26 | language: "trig" 27 | } 28 | ] 29 | }; 30 | client = new vscode_languageclient_1.LanguageClient("stardogTrigLanguageServer", "Stardog TriG Language Server", serverOptions, clientOptions); 31 | client.start(); 32 | } 33 | exports.activate = activate; 34 | function deactivate() { 35 | if (client) { 36 | return client.stop(); 37 | } 38 | } 39 | exports.deactivate = deactivate; 40 | //# sourceMappingURL=extension.js.map -------------------------------------------------------------------------------- /vscode-langserver-trig/out/extension.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAE7B,iEAM+B;AAE/B,IAAI,MAAsB,CAAC;AAE3B,SAAgB,QAAQ,CAAC,OAAgC;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CACnC,IAAI,CAAC,IAAI,CACP,cAAc,EACd,sBAAsB,EACtB,MAAM,EACN,QAAQ,CACT,CACF,CAAC;IACF,MAAM,iBAAiB,GAAe;QACpC,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,qCAAa,CAAC,KAAK;QAC9B,IAAI,EAAE,CAAC,SAAS,CAAC;KAClB,CAAC;IACF,MAAM,aAAa,GAAkB;QACnC,GAAG,EAAE,iBAAiB;QACtB,KAAK,kCACA,iBAAiB;YACpB,wCAAwC;YACxC,OAAO,EAAE;gBACP,QAAQ,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;aACzC,GACF;KACF,CAAC;IACF,MAAM,aAAa,GAA0B;QAC3C,gBAAgB,EAAE;YAChB;gBACE,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM;aACjB;SACF;KACF,CAAC;IAEF,MAAM,GAAG,IAAI,sCAAc,CACzB,2BAA2B,EAC3B,8BAA8B,EAC9B,aAAa,EACb,aAAa,CACd,CAAC;IAEF,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAzCD,4BAyCC;AAED,SAAgB,UAAU;IACxB,IAAI,MAAM,EAAE;QACV,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;KACtB;AACH,CAAC;AAJD,gCAIC"} -------------------------------------------------------------------------------- /vscode-langserver-trig/out/test/extension.test.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | const chai_1 = require("chai"); 13 | const path = require("path"); 14 | const vscode = require("vscode"); 15 | const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); 16 | describe("TriG Language Server Extension", () => { 17 | let docUri; 18 | let document; 19 | beforeEach(() => __awaiter(void 0, void 0, void 0, function* () { 20 | const ext = vscode.extensions.getExtension("stardog-union.vscode-langserver-trig"); 21 | yield ext.activate(); 22 | docUri = vscode.Uri.file(path.join(__dirname, "..", "..", "fixtures", "bad", "basic-bad-trig.trig")); 23 | document = yield vscode.workspace.openTextDocument(docUri); 24 | yield vscode.window.showTextDocument(document); 25 | yield sleep(2000); // let server start 26 | })); 27 | afterEach(() => { 28 | document = null; 29 | }); 30 | it("receives error diagnostics from the server", () => { 31 | const receivedDiagnostics = vscode.languages.getDiagnostics(docUri); 32 | const normalizedReceivedDiagnostics = JSON.parse(JSON.stringify(receivedDiagnostics)); 33 | chai_1.expect(normalizedReceivedDiagnostics).to.eql([ 34 | { 35 | severity: "Error", 36 | message: "'}' expected.", 37 | range: [ 38 | { 39 | line: 1, 40 | character: 21 41 | }, 42 | { 43 | line: 1, 44 | character: 22 45 | } 46 | ], 47 | source: "wrappedGraph" 48 | } 49 | ]); 50 | }); 51 | it("receives hover help from the server", () => __awaiter(void 0, void 0, void 0, function* () { 52 | const hoverHelp = (yield vscode.commands.executeCommand("vscode.executeHoverProvider", docUri, new vscode.Position(0, 0))); 53 | const { contents } = hoverHelp[0]; 54 | const range = hoverHelp[0].range; 55 | chai_1.expect(typeof contents[0] === 'string' ? contents[0] : contents[0].value).to.eql("```\nblock\n```"); 56 | chai_1.expect(range.start.line).to.eql(0); 57 | chai_1.expect(range.start.character).to.eql(0); 58 | chai_1.expect(range.end.line).to.eql(2); 59 | chai_1.expect(range.end.character).to.eql(1); 60 | })); 61 | }); 62 | //# sourceMappingURL=extension.test.js.map -------------------------------------------------------------------------------- /vscode-langserver-trig/out/test/extension.test.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../src/test/extension.test.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /vscode-langserver-trig/out/test/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | // 3 | // PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING 4 | // 5 | // This file is providing the test runner to use when running extension tests. 6 | // By default the test runner in use is Mocha based. 7 | // 8 | // You can provide your own test runner if you want to override it by exporting 9 | // a function run(testRoot: string, clb: (error:Error) => void) that the extension 10 | // host can call to run the tests. The test runner is expected to use console.log 11 | // to report the results back to the caller. When the tests are finished, return 12 | // a possible error to the callback or null if none. 13 | Object.defineProperty(exports, "__esModule", { value: true }); 14 | const testRunner = require("vscode/lib/testrunner"); 15 | // You can directly control Mocha options by uncommenting the following lines 16 | // See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info 17 | testRunner.configure({ 18 | ui: "bdd", 19 | useColors: true, 20 | timeout: 10000 // allow VSCode and server time to start 21 | }); 22 | module.exports = testRunner; 23 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /vscode-langserver-trig/out/test/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,mEAAmE;AACnE,EAAE;AACF,8EAA8E;AAC9E,oDAAoD;AACpD,EAAE;AACF,+EAA+E;AAC/E,kFAAkF;AAClF,iFAAiF;AACjF,gFAAgF;AAChF,oDAAoD;;AAEpD,oDAAoD;AAEpD,6EAA6E;AAC7E,mGAAmG;AACnG,UAAU,CAAC,SAAS,CAAC;IACnB,EAAE,EAAE,KAAK;IACT,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,KAAK,CAAC,wCAAwC;CACxD,CAAC,CAAC;AAEH,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC"} -------------------------------------------------------------------------------- /vscode-langserver-trig/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-langserver-trig", 3 | "publisher": "stardog-union", 4 | "license": "Apache-2.0", 5 | "displayName": "TriG Language Server", 6 | "description": "Language intelligence (diagnostics, hover tooltips, etc.) for TriG", 7 | "version": "0.2.0", 8 | "contributors": [ 9 | { 10 | "name": "Jason Rogers", 11 | "email": "jason@stardog.com" 12 | } 13 | ], 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/stardog-union/stardog-vsc.git" 17 | }, 18 | "bugs": { 19 | "url": "https://github.com/stardog-union/stardog-vsc/issues" 20 | }, 21 | "homepage": "https://github.com/stardog-union/stardog-vsc/vscode-langserver-trig/#readme", 22 | "engines": { 23 | "vscode": "^1.30.0" 24 | }, 25 | "categories": [ 26 | "Programming Languages", 27 | "Linters", 28 | "Other" 29 | ], 30 | "activationEvents": [ 31 | "onLanguage:trig" 32 | ], 33 | "main": "./out/extension", 34 | "scripts": { 35 | "vscode:prepublish": "yarn run compile", 36 | "compile": "tsc -p ./", 37 | "watch": "tsc -watch -p ./", 38 | "test": "yarn run compile && node ./out/test/runTest.js" 39 | }, 40 | "devDependencies": { 41 | "@types/chai": "^4.1.7", 42 | "@types/mocha": "^2.2.42", 43 | "@types/node": "^15.12.4", 44 | "chai": "^4.2.0", 45 | "mocha": "^9.0.1", 46 | "tslint": "^5.8.0", 47 | "typescript": "^4.3.4", 48 | "vscode": "^1.1.37", 49 | "vscode-test": "^1.5.2" 50 | }, 51 | "dependencies": { 52 | "trig-language-server": "^2.4.0", 53 | "vscode-languageclient": "^5.2.1" 54 | }, 55 | "extensionDependencies": [ 56 | "stardog-union.stardog-rdf-grammars" 57 | ] 58 | } 59 | -------------------------------------------------------------------------------- /vscode-langserver-trig/src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as vscode from "vscode"; 3 | import { 4 | LanguageClient, 5 | LanguageClientOptions, 6 | ServerOptions, 7 | TransportKind, 8 | NodeModule 9 | } from "vscode-languageclient"; 10 | 11 | let client: LanguageClient; 12 | 13 | export function activate(context: vscode.ExtensionContext) { 14 | const server = context.asAbsolutePath( 15 | path.join( 16 | "node_modules", 17 | "trig-language-server", 18 | "dist", 19 | "cli.js" 20 | ) 21 | ); 22 | const baseServerOptions: NodeModule = { 23 | module: server, 24 | transport: TransportKind.stdio, 25 | args: ["--stdio"] 26 | }; 27 | const serverOptions: ServerOptions = { 28 | run: baseServerOptions, 29 | debug: { 30 | ...baseServerOptions, 31 | // allow attaching VSCode in debug mode: 32 | options: { 33 | execArgv: ["--nolazy", "--inspect=6009"] 34 | } 35 | } 36 | }; 37 | const clientOptions: LanguageClientOptions = { 38 | documentSelector: [ 39 | { 40 | scheme: "file", 41 | language: "trig" 42 | } 43 | ] 44 | }; 45 | 46 | client = new LanguageClient( 47 | "stardogTrigLanguageServer", 48 | "Stardog TriG Language Server", 49 | serverOptions, 50 | clientOptions 51 | ); 52 | 53 | client.start(); 54 | } 55 | 56 | export function deactivate() { 57 | if (client) { 58 | return client.stop(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /vscode-langserver-trig/src/test/extension.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from "chai"; 2 | import * as path from "path"; 3 | import * as vscode from "vscode"; 4 | 5 | const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); 6 | 7 | describe("TriG Language Server Extension", () => { 8 | let docUri: vscode.Uri; 9 | let document: vscode.TextDocument | null; 10 | 11 | beforeEach(async () => { 12 | const ext = vscode.extensions.getExtension("stardog-union.vscode-langserver-trig")!; 13 | await ext.activate(); 14 | docUri = vscode.Uri.file( 15 | path.join(__dirname, "..", "..", "fixtures", "bad", "basic-bad-trig.trig") 16 | ); 17 | document = await vscode.workspace.openTextDocument(docUri); 18 | await vscode.window.showTextDocument(document); 19 | await sleep(2000); // let server start 20 | }); 21 | 22 | afterEach(() => { 23 | document = null; 24 | }); 25 | 26 | it("receives error diagnostics from the server", () => { 27 | const receivedDiagnostics = vscode.languages.getDiagnostics(docUri); 28 | const normalizedReceivedDiagnostics = JSON.parse(JSON.stringify(receivedDiagnostics)); 29 | expect(normalizedReceivedDiagnostics).to.eql([ 30 | { 31 | severity: "Error", 32 | message: "'}' expected.", 33 | range: [ 34 | { 35 | line: 1, 36 | character: 21 37 | }, 38 | { 39 | line: 1, 40 | character: 22 41 | } 42 | ], 43 | source: "wrappedGraph" 44 | } 45 | ]); 46 | }); 47 | 48 | it("receives hover help from the server", async () => { 49 | const hoverHelp = (await vscode.commands.executeCommand( 50 | "vscode.executeHoverProvider", 51 | docUri, 52 | new vscode.Position(0, 0) 53 | )) as vscode.Hover[]; 54 | const { contents } = hoverHelp[0]; 55 | const range = hoverHelp[0].range as vscode.Range; 56 | expect(typeof contents[0] === 'string' ? contents[0] : contents[0].value).to.eql("```\nblock\n```"); 57 | expect(range.start.line).to.eql(0); 58 | expect(range.start.character).to.eql(0); 59 | expect(range.end.line).to.eql(2); 60 | expect(range.end.character).to.eql(1); 61 | }); 62 | }); 63 | -------------------------------------------------------------------------------- /vscode-langserver-trig/src/test/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as Mocha from "mocha"; 3 | 4 | export function run(): Promise { 5 | const mocha = new Mocha({ 6 | // @ts-ignore: Mocha types are missing `color` 7 | color: true, 8 | ui: "bdd", 9 | timeout: 5000, 10 | }); 11 | 12 | return new Promise((c, e) => { 13 | mocha.addFile(path.resolve(__dirname, "extension.test.js")); 14 | 15 | try { 16 | mocha.run((failures) => { 17 | if (failures > 0) { 18 | e(new Error(`${failures} tests failed.`)); 19 | } else { 20 | c(); 21 | } 22 | }); 23 | } catch (err) { 24 | e(err); 25 | } 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /vscode-langserver-trig/src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import { downloadAndUnzipVSCode, runTests } from "vscode-test"; 3 | 4 | async function main() { 5 | try { 6 | const extensionDevelopmentPath = path.resolve(__dirname, "../../../"); 7 | const extensionTestsPath = path.resolve(__dirname, "./index"); 8 | const vscodeExecutablePath = await downloadAndUnzipVSCode(); 9 | 10 | // Run the extension test 11 | await runTests({ 12 | launchArgs: ["--disable-gpu", "--disable-extensions"], 13 | // Use the specified `code` executable 14 | vscodeExecutablePath, 15 | // @ts-ignore: vscode-test types aren't right 16 | extensionDevelopmentPath, 17 | extensionTestsPath, 18 | }); 19 | } catch (err) { 20 | console.error("Failed to run tests"); 21 | process.exit(1); 22 | } 23 | } 24 | 25 | main(); 26 | -------------------------------------------------------------------------------- /vscode-langserver-trig/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": ["es6"], 7 | "sourceMap": true, 8 | "rootDir": "src", 9 | "strict": true, 10 | "noUnusedLocals": true, 11 | "skipLibCheck": true 12 | }, 13 | "exclude": ["node_modules", ".vscode-test"] 14 | } 15 | -------------------------------------------------------------------------------- /vscode-langserver-trig/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-string-throw": true, 4 | "no-unused-expression": true, 5 | "no-duplicate-variable": true, 6 | "curly": true, 7 | "class-name": true, 8 | "semicolon": [true, "always"], 9 | "triple-equals": true 10 | }, 11 | "defaultSeverity": "warning" 12 | } 13 | -------------------------------------------------------------------------------- /vscode-langserver-turtle/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "eg2.tslint" 6 | ] 7 | } -------------------------------------------------------------------------------- /vscode-langserver-turtle/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "runtimeExecutable": "${execPath}", 13 | "args": [ 14 | "--extensionDevelopmentPath=${workspaceFolder}" 15 | ], 16 | "outFiles": [ 17 | "${workspaceFolder}/out/**/*.js" 18 | ], 19 | "preLaunchTask": "npm: watch" 20 | }, 21 | { 22 | "name": "Extension Tests", 23 | "type": "extensionHost", 24 | "request": "launch", 25 | "runtimeExecutable": "${execPath}", 26 | "args": [ 27 | "--extensionDevelopmentPath=${workspaceFolder}", 28 | "--extensionTestsPath=${workspaceFolder}/out/test" 29 | ], 30 | "outFiles": [ 31 | "${workspaceFolder}/out/test/**/*.js" 32 | ], 33 | "preLaunchTask": "npm: watch" 34 | } 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /vscode-langserver-turtle/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false // set this to true to hide the "out" folder with the compiled JS files 5 | }, 6 | "search.exclude": { 7 | "out": true // set this to false to include "out" folder in search results 8 | }, 9 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts 10 | "typescript.tsc.autoDetect": "off" 11 | } -------------------------------------------------------------------------------- /vscode-langserver-turtle/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "watch", 9 | "problemMatcher": "$tsc-watch", 10 | "isBackground": true, 11 | "presentation": { 12 | "reveal": "never" 13 | }, 14 | "group": { 15 | "kind": "build", 16 | "isDefault": true 17 | } 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /vscode-langserver-turtle/.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | out/test/** 4 | out/**/*.map 5 | src/** 6 | .gitignore 7 | tsconfig.json 8 | vsc-extension-quickstart.md 9 | tslint.json -------------------------------------------------------------------------------- /vscode-langserver-turtle/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | All notable changes to the "vscode-langserver-turtle" extension will be documented in this file. 4 | 5 | ## [0.2.1] 6 | 7 | - Add support for `.acl` file extensions (#89) 8 | - Fix recognition of triple quote string literals (#90) 9 | 10 | ## [0.1.0] 11 | 12 | - New millan/chevrotain dependencies 13 | 14 | ## [0.0.1] 15 | 16 | - Initial release 17 | -------------------------------------------------------------------------------- /vscode-langserver-turtle/README.md: -------------------------------------------------------------------------------- 1 | # vscode-langserver-turtle 2 | 3 | A Visual Studio Code extension providing language intelligence (diagnostics, 4 | hover tooltips, etc.) for the W3C standard [Turtle RDF syntax](https://www.w3.org/TR/turtle/) via the Language 5 | Server Protocol. 6 | 7 | ## Features 8 | 9 | - Diagnostics (error hints) 10 | - Hover tooltips (identifies entities in Turtle grammar and shows "expected" 11 | symbols in the case of an error) 12 | - Syntax highlighting (via the `stardog-rdf-grammars` extension) 13 | - Open source 14 | - No arbitrary code execution 15 | - Powers some of the core language intelligence capabilities of [Stardog Studio](https://www.stardog.com/studio/) 16 | 17 | ## License 18 | 19 | Apache-2.0 20 | -------------------------------------------------------------------------------- /vscode-langserver-turtle/fixtures/bad/basic-bad-turtle.ttl: -------------------------------------------------------------------------------- 1 | @prefix -------------------------------------------------------------------------------- /vscode-langserver-turtle/out/extension.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.deactivate = exports.activate = void 0; 4 | const path = require("path"); 5 | const vscode_languageclient_1 = require("vscode-languageclient"); 6 | let client; 7 | function activate(context) { 8 | const server = context.asAbsolutePath(path.join("node_modules", "srs-language-server", "dist", "cli.js")); 9 | const baseServerOptions = { 10 | module: server, 11 | transport: vscode_languageclient_1.TransportKind.stdio, 12 | args: ["--stdio"] 13 | }; 14 | const serverOptions = { 15 | run: baseServerOptions, 16 | debug: Object.assign(Object.assign({}, baseServerOptions), { 17 | // allow attaching VSCode in debug mode: 18 | options: { 19 | execArgv: ["--nolazy", "--inspect=6009"] 20 | } }) 21 | }; 22 | const clientOptions = { 23 | documentSelector: [ 24 | { 25 | scheme: "file", 26 | language: "turtle" 27 | } 28 | ] 29 | }; 30 | client = new vscode_languageclient_1.LanguageClient("stardogTurtleLanguageServer", "Stardog Turtle Language Server", serverOptions, clientOptions); 31 | client.start(); 32 | } 33 | exports.activate = activate; 34 | function deactivate() { 35 | if (client) { 36 | return client.stop(); 37 | } 38 | } 39 | exports.deactivate = deactivate; 40 | //# sourceMappingURL=extension.js.map -------------------------------------------------------------------------------- /vscode-langserver-turtle/out/extension.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAE7B,iEAM+B;AAE/B,IAAI,MAAsB,CAAC;AAE3B,SAAgB,QAAQ,CAAC,OAAgC;IACvD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CACnC,IAAI,CAAC,IAAI,CACP,cAAc,EACd,qBAAqB,EACrB,MAAM,EACN,QAAQ,CACT,CACF,CAAC;IACF,MAAM,iBAAiB,GAAe;QACpC,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,qCAAa,CAAC,KAAK;QAC9B,IAAI,EAAE,CAAC,SAAS,CAAC;KAClB,CAAC;IACF,MAAM,aAAa,GAAkB;QACnC,GAAG,EAAE,iBAAiB;QACtB,KAAK,kCACA,iBAAiB;YACpB,wCAAwC;YACxC,OAAO,EAAE;gBACP,QAAQ,EAAE,CAAC,UAAU,EAAE,gBAAgB,CAAC;aACzC,GACF;KACF,CAAC;IACF,MAAM,aAAa,GAA0B;QAC3C,gBAAgB,EAAE;YAChB;gBACE,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,QAAQ;aACnB;SACF;KACF,CAAC;IAEF,MAAM,GAAG,IAAI,sCAAc,CACzB,6BAA6B,EAC7B,gCAAgC,EAChC,aAAa,EACb,aAAa,CACd,CAAC;IAEF,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAzCD,4BAyCC;AAED,SAAgB,UAAU;IACxB,IAAI,MAAM,EAAE;QACV,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;KACtB;AACH,CAAC;AAJD,gCAIC"} -------------------------------------------------------------------------------- /vscode-langserver-turtle/out/test/extension.test.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | const chai_1 = require("chai"); 13 | const path = require("path"); 14 | const vscode = require("vscode"); 15 | const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); 16 | describe("Turtle Language Server Extension", () => { 17 | let docUri; 18 | let document; 19 | beforeEach(() => __awaiter(void 0, void 0, void 0, function* () { 20 | const ext = vscode.extensions.getExtension("stardog-union.vscode-langserver-turtle"); 21 | yield ext.activate(); 22 | docUri = vscode.Uri.file(path.join(__dirname, "..", "..", "fixtures", "bad", "basic-bad-turtle.ttl")); 23 | document = yield vscode.workspace.openTextDocument(docUri); 24 | yield vscode.window.showTextDocument(document); 25 | yield sleep(2000); // let server start 26 | })); 27 | afterEach(() => { 28 | document = null; 29 | }); 30 | it("receives error diagnostics from the server", () => { 31 | const receivedDiagnostics = vscode.languages.getDiagnostics(docUri); 32 | const normalizedReceivedDiagnostics = JSON.parse(JSON.stringify(receivedDiagnostics)); 33 | chai_1.expect(normalizedReceivedDiagnostics).to.eql([ 34 | { 35 | severity: "Error", 36 | message: "PNAME_NS expected.", 37 | range: [ 38 | { 39 | line: 0, 40 | character: 7 41 | }, 42 | { 43 | line: 0, 44 | character: 7 45 | } 46 | ], 47 | source: "prefixID" 48 | } 49 | ]); 50 | }); 51 | it("receives hover help from the server", () => __awaiter(void 0, void 0, void 0, function* () { 52 | const hoverHelp = (yield vscode.commands.executeCommand("vscode.executeHoverProvider", docUri, new vscode.Position(0, 0))); 53 | const { contents } = hoverHelp[0]; 54 | const range = hoverHelp[0].range; 55 | chai_1.expect(typeof contents[0] === 'string' ? contents[0] : contents[0].value).to.eql("```\nprefixID\n```"); 56 | chai_1.expect(range.start.line).to.eql(0); 57 | chai_1.expect(range.start.character).to.eql(0); 58 | chai_1.expect(range.end.line).to.eql(0); 59 | chai_1.expect(range.end.character).to.eql(7); 60 | })); 61 | }); 62 | //# sourceMappingURL=extension.test.js.map -------------------------------------------------------------------------------- /vscode-langserver-turtle/out/test/extension.test.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"extension.test.js","sourceRoot":"","sources":["../../src/test/extension.test.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /vscode-langserver-turtle/out/test/index.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | exports.run = void 0; 4 | const path = require("path"); 5 | const Mocha = require("mocha"); 6 | function run() { 7 | const mocha = new Mocha({ 8 | // @ts-ignore: Mocha types are missing `color` 9 | color: true, 10 | ui: "bdd", 11 | timeout: 5000, 12 | }); 13 | return new Promise((c, e) => { 14 | mocha.addFile(path.resolve(__dirname, "extension.test.js")); 15 | try { 16 | mocha.run((failures) => { 17 | if (failures > 0) { 18 | e(new Error(`${failures} tests failed.`)); 19 | } 20 | else { 21 | c(); 22 | } 23 | }); 24 | } 25 | catch (err) { 26 | e(err); 27 | } 28 | }); 29 | } 30 | exports.run = run; 31 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /vscode-langserver-turtle/out/test/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":";;;AAAA,6BAA6B;AAC7B,+BAA+B;AAE/B,SAAgB,GAAG;IACjB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC;QACtB,8CAA8C;QAC9C,KAAK,EAAE,IAAI;QACX,EAAE,EAAE,KAAK;QACT,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IAEH,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAE5D,IAAI;YACF,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACrB,IAAI,QAAQ,GAAG,CAAC,EAAE;oBAChB,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,QAAQ,gBAAgB,CAAC,CAAC,CAAC;iBAC3C;qBAAM;oBACL,CAAC,EAAE,CAAC;iBACL;YACH,CAAC,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,CAAC,CAAC,GAAG,CAAC,CAAC;SACR;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAvBD,kBAuBC"} -------------------------------------------------------------------------------- /vscode-langserver-turtle/out/test/runTest.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { 3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } 4 | return new (P || (P = Promise))(function (resolve, reject) { 5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } 6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } 7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } 8 | step((generator = generator.apply(thisArg, _arguments || [])).next()); 9 | }); 10 | }; 11 | Object.defineProperty(exports, "__esModule", { value: true }); 12 | const cp = require("child_process"); 13 | const path = require("path"); 14 | const vscode_test_1 = require("vscode-test"); 15 | function main() { 16 | return __awaiter(this, void 0, void 0, function* () { 17 | try { 18 | const extensionDevelopmentPath = path.resolve(__dirname, "../../../"); 19 | const extensionTestsPath = path.resolve(__dirname, "./index"); 20 | const vscodeExecutablePath = yield vscode_test_1.downloadAndUnzipVSCode(); 21 | const cliPath = vscode_test_1.resolveCliPathFromVSCodeExecutablePath(vscodeExecutablePath); 22 | // Use cp.spawn / cp.exec for custom setup 23 | cp.spawnSync(cliPath, ["--disable-gpu", "--disable-extensions"], { 24 | encoding: "utf-8", 25 | stdio: "inherit", 26 | }); 27 | // Run the extension test 28 | yield vscode_test_1.runTests({ 29 | // Use the specified `code` executable 30 | vscodeExecutablePath, 31 | // @ts-ignore: vscode-test types aren't right 32 | extensionDevelopmentPath, 33 | extensionTestsPath, 34 | }); 35 | } 36 | catch (err) { 37 | console.error("Failed to run tests"); 38 | process.exit(1); 39 | } 40 | }); 41 | } 42 | main(); 43 | //# sourceMappingURL=runTest.js.map -------------------------------------------------------------------------------- /vscode-langserver-turtle/out/test/runTest.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"runTest.js","sourceRoot":"","sources":["../../src/test/runTest.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,oCAAoC;AACpC,6BAA6B;AAC7B,6CAIqB;AAErB,SAAe,IAAI;;QACjB,IAAI;YACF,MAAM,wBAAwB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACtE,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC9D,MAAM,oBAAoB,GAAG,MAAM,oCAAsB,EAAE,CAAC;YAC5D,MAAM,OAAO,GAAG,oDAAsC,CAAC,oBAAoB,CAAC,CAAC;YAE7E,0CAA0C;YAC1C,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,sBAAsB,CAAC,EAAE;gBAC/D,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,SAAS;aACjB,CAAC,CAAC;YAEH,yBAAyB;YACzB,MAAM,sBAAQ,CAAC;gBACb,sCAAsC;gBACtC,oBAAoB;gBACpB,6CAA6C;gBAC7C,wBAAwB;gBACxB,kBAAkB;aACnB,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACjB;IACH,CAAC;CAAA;AAED,IAAI,EAAE,CAAC"} -------------------------------------------------------------------------------- /vscode-langserver-turtle/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-langserver-turtle", 3 | "publisher": "stardog-union", 4 | "license": "Apache-2.0", 5 | "displayName": "Turtle Language Server", 6 | "description": "Language intelligence (diagnostics, hover tooltips, etc.) for Turtle", 7 | "version": "0.2.1", 8 | "contributors": [ 9 | { 10 | "name": "Jason Rogers", 11 | "email": "jason@stardog.com" 12 | } 13 | ], 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/stardog-union/stardog-vsc.git" 17 | }, 18 | "bugs": { 19 | "url": "https://github.com/stardog-union/stardog-vsc/issues" 20 | }, 21 | "homepage": "https://github.com/stardog-union/stardog-vsc/vscode-langserver-turtle/#readme", 22 | "engines": { 23 | "vscode": "^1.30.0" 24 | }, 25 | "categories": [ 26 | "Programming Languages", 27 | "Linters", 28 | "Other" 29 | ], 30 | "activationEvents": [ 31 | "onLanguage:turtle", 32 | "onLanguage:ttl" 33 | ], 34 | "main": "./out/extension", 35 | "scripts": { 36 | "vscode:prepublish": "yarn run compile", 37 | "compile": "tsc -p ./", 38 | "watch": "tsc -watch -p ./", 39 | "test": "yarn run compile && node ./out/test/runTest.js" 40 | }, 41 | "devDependencies": { 42 | "@types/chai": "^4.1.7", 43 | "@types/mocha": "^2.2.42", 44 | "@types/node": "^15.12.4", 45 | "chai": "^4.2.0", 46 | "mocha": "^9.0.1", 47 | "tslint": "^5.8.0", 48 | "typescript": "^4.3.4", 49 | "vscode": "^1.1.37", 50 | "vscode-test": "^1.5.2" 51 | }, 52 | "dependencies": { 53 | "srs-language-server": "^1.3.3", 54 | "turtle-language-server": "^3.4.0", 55 | "vscode-languageclient": "^5.2.1" 56 | }, 57 | "extensionDependencies": [ 58 | "stardog-union.stardog-rdf-grammars" 59 | ] 60 | } 61 | -------------------------------------------------------------------------------- /vscode-langserver-turtle/src/extension.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as vscode from "vscode"; 3 | import { 4 | LanguageClient, 5 | LanguageClientOptions, 6 | ServerOptions, 7 | TransportKind, 8 | NodeModule 9 | } from "vscode-languageclient"; 10 | 11 | let client: LanguageClient; 12 | 13 | export function activate(context: vscode.ExtensionContext) { 14 | const server = context.asAbsolutePath( 15 | path.join( 16 | "node_modules", 17 | "srs-language-server", 18 | "dist", 19 | "cli.js" 20 | ) 21 | ); 22 | const baseServerOptions: NodeModule = { 23 | module: server, 24 | transport: TransportKind.stdio, 25 | args: ["--stdio"] 26 | }; 27 | const serverOptions: ServerOptions = { 28 | run: baseServerOptions, 29 | debug: { 30 | ...baseServerOptions, 31 | // allow attaching VSCode in debug mode: 32 | options: { 33 | execArgv: ["--nolazy", "--inspect=6009"] 34 | } 35 | } 36 | }; 37 | const clientOptions: LanguageClientOptions = { 38 | documentSelector: [ 39 | { 40 | scheme: "file", 41 | language: "turtle" 42 | } 43 | ] 44 | }; 45 | 46 | client = new LanguageClient( 47 | "stardogTurtleLanguageServer", 48 | "Stardog Turtle Language Server", 49 | serverOptions, 50 | clientOptions 51 | ); 52 | 53 | client.start(); 54 | } 55 | 56 | export function deactivate() { 57 | if (client) { 58 | return client.stop(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /vscode-langserver-turtle/src/test/extension.test.ts: -------------------------------------------------------------------------------- 1 | import { expect } from "chai"; 2 | import * as path from "path"; 3 | import * as vscode from "vscode"; 4 | 5 | const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); 6 | 7 | describe("Turtle Language Server Extension", () => { 8 | let docUri: vscode.Uri; 9 | let document: vscode.TextDocument | null; 10 | 11 | beforeEach(async () => { 12 | const ext = vscode.extensions.getExtension("stardog-union.vscode-langserver-turtle")!; 13 | await ext.activate(); 14 | docUri = vscode.Uri.file( 15 | path.join(__dirname, "..", "..", "fixtures", "bad", "basic-bad-turtle.ttl") 16 | ); 17 | document = await vscode.workspace.openTextDocument(docUri); 18 | await vscode.window.showTextDocument(document); 19 | await sleep(2000); // let server start 20 | }); 21 | 22 | afterEach(() => { 23 | document = null; 24 | }); 25 | 26 | it("receives error diagnostics from the server", () => { 27 | const receivedDiagnostics = vscode.languages.getDiagnostics(docUri); 28 | const normalizedReceivedDiagnostics = JSON.parse(JSON.stringify(receivedDiagnostics)); 29 | expect(normalizedReceivedDiagnostics).to.eql([ 30 | { 31 | severity: "Error", 32 | message: "PNAME_NS expected.", 33 | range: [ 34 | { 35 | line: 0, 36 | character: 7 37 | }, 38 | { 39 | line: 0, 40 | character: 7 41 | } 42 | ], 43 | source: "prefixID" 44 | } 45 | ]); 46 | }); 47 | 48 | it("receives hover help from the server", async () => { 49 | const hoverHelp = (await vscode.commands.executeCommand( 50 | "vscode.executeHoverProvider", 51 | docUri, 52 | new vscode.Position(0, 0) 53 | )) as vscode.Hover[]; 54 | const { contents } = hoverHelp[0]; 55 | const range = hoverHelp[0].range as vscode.Range; 56 | expect(typeof contents[0] === 'string' ? contents[0] : contents[0].value).to.eql("```\nprefixID\n```"); 57 | expect(range.start.line).to.eql(0); 58 | expect(range.start.character).to.eql(0); 59 | expect(range.end.line).to.eql(0); 60 | expect(range.end.character).to.eql(7); 61 | }); 62 | }); 63 | -------------------------------------------------------------------------------- /vscode-langserver-turtle/src/test/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as Mocha from "mocha"; 3 | 4 | export function run(): Promise { 5 | const mocha = new Mocha({ 6 | // @ts-ignore: Mocha types are missing `color` 7 | color: true, 8 | ui: "bdd", 9 | timeout: 5000, 10 | }); 11 | 12 | return new Promise((c, e) => { 13 | mocha.addFile(path.resolve(__dirname, "extension.test.js")); 14 | 15 | try { 16 | mocha.run((failures) => { 17 | if (failures > 0) { 18 | e(new Error(`${failures} tests failed.`)); 19 | } else { 20 | c(); 21 | } 22 | }); 23 | } catch (err) { 24 | e(err); 25 | } 26 | }); 27 | } 28 | -------------------------------------------------------------------------------- /vscode-langserver-turtle/src/test/runTest.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import { downloadAndUnzipVSCode, runTests } from "vscode-test"; 3 | 4 | async function main() { 5 | try { 6 | const extensionDevelopmentPath = path.resolve(__dirname, "../../../"); 7 | const extensionTestsPath = path.resolve(__dirname, "./index"); 8 | const vscodeExecutablePath = await downloadAndUnzipVSCode(); 9 | 10 | // Run the extension test 11 | await runTests({ 12 | launchArgs: ["--disable-gpu", "--disable-extensions"], 13 | // Use the specified `code` executable 14 | vscodeExecutablePath, 15 | // @ts-ignore: vscode-test types aren't right 16 | extensionDevelopmentPath, 17 | extensionTestsPath, 18 | }); 19 | } catch (err) { 20 | console.error("Failed to run tests"); 21 | process.exit(1); 22 | } 23 | } 24 | 25 | main(); 26 | -------------------------------------------------------------------------------- /vscode-langserver-turtle/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": ["es6"], 7 | "sourceMap": true, 8 | "rootDir": "src", 9 | "strict": true, 10 | "noUnusedLocals": true 11 | }, 12 | "exclude": ["node_modules", ".vscode-test"] 13 | } 14 | -------------------------------------------------------------------------------- /vscode-langserver-turtle/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-string-throw": true, 4 | "no-unused-expression": true, 5 | "no-duplicate-variable": true, 6 | "curly": true, 7 | "class-name": true, 8 | "semicolon": [true, "always"], 9 | "triple-equals": true 10 | }, 11 | "defaultSeverity": "warning" 12 | } 13 | -------------------------------------------------------------------------------- /vscode-stardog-languages/.gitattributes: -------------------------------------------------------------------------------- 1 | # Set default behavior to automatically normalize line endings. 2 | * text=auto 3 | 4 | -------------------------------------------------------------------------------- /vscode-stardog-languages/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.vsix 3 | -------------------------------------------------------------------------------- /vscode-stardog-languages/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that launches the extension inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [ 8 | { 9 | "name": "Extension", 10 | "type": "extensionHost", 11 | "request": "launch", 12 | "runtimeExecutable": "${execPath}", 13 | "args": [ 14 | "--extensionDevelopmentPath=${workspaceFolder}" 15 | ] 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /vscode-stardog-languages/.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | .gitignore 4 | vsc-extension-quickstart.md 5 | -------------------------------------------------------------------------------- /vscode-stardog-languages/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | All notable changes to the "vscode-stardog-languages" extension pack will be documented in this file. 3 | 4 | ## [0.1.0] 5 | - Add SHACL and TriG extension dependencies 6 | 7 | ## [0.0.1] 8 | - Initial release 9 | -------------------------------------------------------------------------------- /vscode-stardog-languages/README.md: -------------------------------------------------------------------------------- 1 | # vscode-stardog-languages 2 | 3 | [Stardog](https://www.stardog.com/)'s all-in-one Visual Studio Code extension pack for working with Stardog 4 | languages, including [the SPARQL query language](https://www.w3.org/TR/sparql11-query/) (plus Stardog SPARQL extensions), the 5 | [Turtle RDF Syntax](https://www.w3.org/TR/turtle/), and [Stardog Mapping Syntax 2 (SMS)](https://www.stardog.com/docs/#_stardog_mapping_syntax_2). 6 | 7 | ## Features 8 | 9 | - SPARQL autocompletion, diagnostics, and hover tooltips (for both W3C standard 10 | SPARQL and Stardog SPARQL extensions) 11 | - Turtle diagnostics and hover tooltips 12 | - SMS diagnostics and hover tooltips 13 | - Syntax highlighting for SPARQL, Turtle, SMS, and Stardog Rules Syntax (SRS) 14 | - Includes features powering some of the core language intelligence features of 15 | [Stardog Studio](https://www.stardog.com/studio/) 16 | 17 | ## License 18 | 19 | Apache-2.0 20 | -------------------------------------------------------------------------------- /vscode-stardog-languages/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-stardog-languages", 3 | "publisher": "stardog-union", 4 | "displayName": "Stardog/RDF Languages Extension Pack", 5 | "description": "Language intelligence and syntax highlighting for Stardog languages", 6 | "license": "Apache-2.0", 7 | "version": "0.1.0", 8 | "contributors": [ 9 | { 10 | "name": "Jason Rogers", 11 | "email": "jason@stardog.com" 12 | } 13 | ], 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/stardog-union/stardog-vsc.git" 17 | }, 18 | "bugs": { 19 | "url": "https://github.com/stardog-union/stardog-vsc/issues" 20 | }, 21 | "homepage": "https://github.com/stardog-union/stardog-vsc/vscode-stardog-languages/#readme", 22 | "engines": { 23 | "vscode": "^1.30.0" 24 | }, 25 | "categories": [ 26 | "Extension Packs" 27 | ], 28 | "extensionPack": [ 29 | "stardog-union.stardog-rdf-grammars", 30 | "stardog-union.vscode-langserver-shacl", 31 | "stardog-union.vscode-langserver-sms", 32 | "stardog-union.vscode-langserver-sparql", 33 | "stardog-union.vscode-langserver-turtle", 34 | "stardog-union.vscode-langserver-trig" 35 | ] 36 | } 37 | --------------------------------------------------------------------------------