├── .github ├── dependabot.yml └── workflows │ └── maven.yml ├── .gitignore ├── .mvn └── extensions.xml ├── .project ├── .settings └── org.eclipse.core.resources.prefs ├── CONTRIBUTING.md ├── Jenkinsfile ├── LICENSE ├── README.md ├── RELEASE_NOTES.md ├── SECURITY.md ├── artwork └── sh.svg ├── org.eclipse.shellwax.core ├── .classpath ├── .gitignore ├── .project ├── .settings │ ├── org.eclipse.core.resources.prefs │ ├── org.eclipse.jdt.core.prefs │ ├── org.eclipse.jdt.ui.prefs │ └── org.eclipse.pde.prefs ├── META-INF │ └── MANIFEST.MF ├── build.properties ├── icons │ ├── sh.png │ └── sh@2x.png ├── plugin.xml └── src │ └── org │ └── eclipse │ └── shellwax │ └── internal │ ├── BashLanguageServer.java │ ├── BashShebangContentDescriber.java │ ├── ShDocumentSetupParticipant.java │ └── run │ ├── ShLaunchConfig.java │ ├── ShLaunchShortcut.java │ ├── ShMainTab.java │ └── ShTabGroup.java ├── org.eclipse.shellwax.feature ├── .gitignore ├── .project ├── .settings │ └── org.eclipse.core.resources.prefs ├── build.properties ├── feature.properties └── feature.xml ├── org.eclipse.shellwax.site ├── .gitignore ├── .project ├── .settings │ └── org.eclipse.core.resources.prefs ├── category.xml └── pom.xml ├── org.eclipse.shellwax.target └── target-platform.target └── pom.xml /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: maven 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | open-pull-requests-limit: 10 8 | - package-ecosystem: github-actions 9 | directory: "/" 10 | schedule: 11 | interval: daily -------------------------------------------------------------------------------- /.github/workflows/maven.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Maven 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven 3 | 4 | name: Build Tycho 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | pull_request: 10 | branches: [ master ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Set up JDK 21 20 | uses: actions/setup-java@v4 21 | with: 22 | java-version: '21' 23 | distribution: 'temurin' 24 | - name: Set up Maven 25 | uses: stCarolas/setup-maven@v5 26 | with: 27 | maven-version: 3.9.9 28 | - name: Cache local Maven repository 29 | uses: actions/cache@v4 30 | with: 31 | path: ~/.m2/repository 32 | key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} 33 | restore-keys: | 34 | ${{ runner.os }}-maven- 35 | - name: Build with Maven 36 | run: mvn -U -V -ntp -e clean install --file pom.xml 37 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | */.polyglot.* 3 | -------------------------------------------------------------------------------- /.mvn/extensions.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | org.eclipse.tycho 5 | tycho-build 6 | 4.0.13 7 | 8 | -------------------------------------------------------------------------------- /.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | shellwax 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.m2e.core.maven2Builder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.m2e.core.maven2Nature 16 | 17 | 18 | -------------------------------------------------------------------------------- /.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing to Eclipse ShellWax 2 | 3 | Thanks for your interest in this project. 4 | 5 | ## Project description 6 | 7 | The Eclipse ShellWax provides smart editing support for shell script files. 8 | 9 | * https://projects.eclipse.org/projects/tools.shellwax 10 | 11 | ## Developer resources 12 | 13 | Information regarding source code management, builds, coding standards, and 14 | more. 15 | 16 | * https://projects.eclipse.org/projects/tools.shellwax/developer 17 | 18 | This project uses [GitHub issues](https://github.com/eclipse/shellwax/issues) on the respective repositories to track ongoing development and issues. 19 | 20 | Be sure to search for existing bugs before you create another one. Remember that 21 | contributions are always welcome! 22 | 23 | ## Eclipse Development Process 24 | 25 | This Eclipse Foundation open project is governed by the Eclipse Foundation 26 | Development Process and operates under the terms of the Eclipse IP Policy. 27 | 28 | ## Eclipse Contributor Agreement 29 | 30 | Before your contribution can be accepted by the project team contributors must 31 | electronically sign the Eclipse Contributor Agreement (ECA). 32 | 33 | * http://www.eclipse.org/legal/ECA.php 34 | 35 | Commits that are provided by non-committers must have a **Signed-off-by** field in 36 | the footer indicating that the author is aware of the terms by which the 37 | contribution has been provided to the project. The non-committer must 38 | additionally have an Eclipse Foundation account and must have a signed Eclipse 39 | Contributor Agreement (ECA) on file. 40 | 41 | For more information, please see the Eclipse Committer Handbook: 42 | https://www.eclipse.org/projects/handbook/#resources-commit 43 | 44 | ## Contact 45 | 46 | Contact the project developers via the project's *dev* list. 47 | 48 | * mailto:shellwax-dev@eclipse.org 49 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | pipeline { 2 | options { 3 | timeout(time: 60, unit: 'MINUTES') 4 | buildDiscarder(logRotator(numToKeepStr:'10')) 5 | } 6 | agent { 7 | label 'ubuntu-latest' 8 | } 9 | tools { 10 | maven 'apache-maven-latest' 11 | jdk 'temurin-jdk21-latest' 12 | } 13 | stages { 14 | stage('Build') { 15 | steps { 16 | withCredentials([file(credentialsId: 'secret-subkeys.asc', variable: 'KEYRING'),string(credentialsId: 'gpg-passphrase', variable: 'MAVEN_GPG_PASSPHRASE')]) { 17 | wrap([$class: 'Xvnc', useXauthority: true]) { 18 | sh 'mvn clean verify -B -Dmaven.test.error.ignore=true -Dmaven.test.failure.ignore=true -Psign -Dmaven.repo.local=$WORKSPACE/.m2/repository -Dtycho.pgp.signer.bc.secretKeys="${KEYRING}"' 19 | } 20 | } 21 | } 22 | post { 23 | always { 24 | archiveArtifacts artifacts: 'org.eclipse.shellwax.site/target/,*/target/work/configuration/*.log,*/target/work/data/.metadata/.log,*/target/work/data/languageServers-log/**' 25 | } 26 | } 27 | } 28 | stage('Deploy') { 29 | when { 30 | branch 'master' 31 | } 32 | steps { 33 | sshagent ( ['projects-storage.eclipse.org-bot-ssh']) { 34 | sh 'ssh genie.shellwax@projects-storage.eclipse.org rm -rf /home/data/httpd/download.eclipse.org/shellwax/snapshots' 35 | sh 'ssh genie.shellwax@projects-storage.eclipse.org mkdir -p /home/data/httpd/download.eclipse.org/shellwax/snapshots' 36 | sh 'scp -r org.eclipse.shellwax.site/target/repository/* genie.shellwax@projects-storage.eclipse.org:/home/data/httpd/download.eclipse.org/shellwax/snapshots' 37 | } 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Eclipse Public License - v 2.0 2 | 3 | THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE 4 | PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION 5 | OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 6 | 7 | 1. DEFINITIONS 8 | 9 | "Contribution" means: 10 | 11 | a) in the case of the initial Contributor, the initial content 12 | Distributed under this Agreement, and 13 | 14 | b) in the case of each subsequent Contributor: 15 | i) changes to the Program, and 16 | ii) additions to the Program; 17 | where such changes and/or additions to the Program originate from 18 | and are Distributed by that particular Contributor. A Contribution 19 | "originates" from a Contributor if it was added to the Program by 20 | such Contributor itself or anyone acting on such Contributor's behalf. 21 | Contributions do not include changes or additions to the Program that 22 | are not Modified Works. 23 | 24 | "Contributor" means any person or entity that Distributes the Program. 25 | 26 | "Licensed Patents" mean patent claims licensable by a Contributor which 27 | are necessarily infringed by the use or sale of its Contribution alone 28 | or when combined with the Program. 29 | 30 | "Program" means the Contributions Distributed in accordance with this 31 | Agreement. 32 | 33 | "Recipient" means anyone who receives the Program under this Agreement 34 | or any Secondary License (as applicable), including Contributors. 35 | 36 | "Derivative Works" shall mean any work, whether in Source Code or other 37 | form, that is based on (or derived from) the Program and for which the 38 | editorial revisions, annotations, elaborations, or other modifications 39 | represent, as a whole, an original work of authorship. 40 | 41 | "Modified Works" shall mean any work in Source Code or other form that 42 | results from an addition to, deletion from, or modification of the 43 | contents of the Program, including, for purposes of clarity any new file 44 | in Source Code form that contains any contents of the Program. Modified 45 | Works shall not include works that contain only declarations, 46 | interfaces, types, classes, structures, or files of the Program solely 47 | in each case in order to link to, bind by name, or subclass the Program 48 | or Modified Works thereof. 49 | 50 | "Distribute" means the acts of a) distributing or b) making available 51 | in any manner that enables the transfer of a copy. 52 | 53 | "Source Code" means the form of a Program preferred for making 54 | modifications, including but not limited to software source code, 55 | documentation source, and configuration files. 56 | 57 | "Secondary License" means either the GNU General Public License, 58 | Version 2.0, or any later versions of that license, including any 59 | exceptions or additional permissions as identified by the initial 60 | Contributor. 61 | 62 | 2. GRANT OF RIGHTS 63 | 64 | a) Subject to the terms of this Agreement, each Contributor hereby 65 | grants Recipient a non-exclusive, worldwide, royalty-free copyright 66 | license to reproduce, prepare Derivative Works of, publicly display, 67 | publicly perform, Distribute and sublicense the Contribution of such 68 | Contributor, if any, and such Derivative Works. 69 | 70 | b) Subject to the terms of this Agreement, each Contributor hereby 71 | grants Recipient a non-exclusive, worldwide, royalty-free patent 72 | license under Licensed Patents to make, use, sell, offer to sell, 73 | import and otherwise transfer the Contribution of such Contributor, 74 | if any, in Source Code or other form. This patent license shall 75 | apply to the combination of the Contribution and the Program if, at 76 | the time the Contribution is added by the Contributor, such addition 77 | of the Contribution causes such combination to be covered by the 78 | Licensed Patents. The patent license shall not apply to any other 79 | combinations which include the Contribution. No hardware per se is 80 | licensed hereunder. 81 | 82 | c) Recipient understands that although each Contributor grants the 83 | licenses to its Contributions set forth herein, no assurances are 84 | provided by any Contributor that the Program does not infringe the 85 | patent or other intellectual property rights of any other entity. 86 | Each Contributor disclaims any liability to Recipient for claims 87 | brought by any other entity based on infringement of intellectual 88 | property rights or otherwise. As a condition to exercising the 89 | rights and licenses granted hereunder, each Recipient hereby 90 | assumes sole responsibility to secure any other intellectual 91 | property rights needed, if any. For example, if a third party 92 | patent license is required to allow Recipient to Distribute the 93 | Program, it is Recipient's responsibility to acquire that license 94 | before distributing the Program. 95 | 96 | d) Each Contributor represents that to its knowledge it has 97 | sufficient copyright rights in its Contribution, if any, to grant 98 | the copyright license set forth in this Agreement. 99 | 100 | e) Notwithstanding the terms of any Secondary License, no 101 | Contributor makes additional grants to any Recipient (other than 102 | those set forth in this Agreement) as a result of such Recipient's 103 | receipt of the Program under the terms of a Secondary License 104 | (if permitted under the terms of Section 3). 105 | 106 | 3. REQUIREMENTS 107 | 108 | 3.1 If a Contributor Distributes the Program in any form, then: 109 | 110 | a) the Program must also be made available as Source Code, in 111 | accordance with section 3.2, and the Contributor must accompany 112 | the Program with a statement that the Source Code for the Program 113 | is available under this Agreement, and informs Recipients how to 114 | obtain it in a reasonable manner on or through a medium customarily 115 | used for software exchange; and 116 | 117 | b) the Contributor may Distribute the Program under a license 118 | different than this Agreement, provided that such license: 119 | i) effectively disclaims on behalf of all other Contributors all 120 | warranties and conditions, express and implied, including 121 | warranties or conditions of title and non-infringement, and 122 | implied warranties or conditions of merchantability and fitness 123 | for a particular purpose; 124 | 125 | ii) effectively excludes on behalf of all other Contributors all 126 | liability for damages, including direct, indirect, special, 127 | incidental and consequential damages, such as lost profits; 128 | 129 | iii) does not attempt to limit or alter the recipients' rights 130 | in the Source Code under section 3.2; and 131 | 132 | iv) requires any subsequent distribution of the Program by any 133 | party to be under a license that satisfies the requirements 134 | of this section 3. 135 | 136 | 3.2 When the Program is Distributed as Source Code: 137 | 138 | a) it must be made available under this Agreement, or if the 139 | Program (i) is combined with other material in a separate file or 140 | files made available under a Secondary License, and (ii) the initial 141 | Contributor attached to the Source Code the notice described in 142 | Exhibit A of this Agreement, then the Program may be made available 143 | under the terms of such Secondary Licenses, and 144 | 145 | b) a copy of this Agreement must be included with each copy of 146 | the Program. 147 | 148 | 3.3 Contributors may not remove or alter any copyright, patent, 149 | trademark, attribution notices, disclaimers of warranty, or limitations 150 | of liability ("notices") contained within the Program from any copy of 151 | the Program which they Distribute, provided that Contributors may add 152 | their own appropriate notices. 153 | 154 | 4. COMMERCIAL DISTRIBUTION 155 | 156 | Commercial distributors of software may accept certain responsibilities 157 | with respect to end users, business partners and the like. While this 158 | license is intended to facilitate the commercial use of the Program, 159 | the Contributor who includes the Program in a commercial product 160 | offering should do so in a manner which does not create potential 161 | liability for other Contributors. Therefore, if a Contributor includes 162 | the Program in a commercial product offering, such Contributor 163 | ("Commercial Contributor") hereby agrees to defend and indemnify every 164 | other Contributor ("Indemnified Contributor") against any losses, 165 | damages and costs (collectively "Losses") arising from claims, lawsuits 166 | and other legal actions brought by a third party against the Indemnified 167 | Contributor to the extent caused by the acts or omissions of such 168 | Commercial Contributor in connection with its distribution of the Program 169 | in a commercial product offering. The obligations in this section do not 170 | apply to any claims or Losses relating to any actual or alleged 171 | intellectual property infringement. In order to qualify, an Indemnified 172 | Contributor must: a) promptly notify the Commercial Contributor in 173 | writing of such claim, and b) allow the Commercial Contributor to control, 174 | and cooperate with the Commercial Contributor in, the defense and any 175 | related settlement negotiations. The Indemnified Contributor may 176 | participate in any such claim at its own expense. 177 | 178 | For example, a Contributor might include the Program in a commercial 179 | product offering, Product X. That Contributor is then a Commercial 180 | Contributor. If that Commercial Contributor then makes performance 181 | claims, or offers warranties related to Product X, those performance 182 | claims and warranties are such Commercial Contributor's responsibility 183 | alone. Under this section, the Commercial Contributor would have to 184 | defend claims against the other Contributors related to those performance 185 | claims and warranties, and if a court requires any other Contributor to 186 | pay any damages as a result, the Commercial Contributor must pay 187 | those damages. 188 | 189 | 5. NO WARRANTY 190 | 191 | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT 192 | PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" 193 | BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR 194 | IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF 195 | TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR 196 | PURPOSE. Each Recipient is solely responsible for determining the 197 | appropriateness of using and distributing the Program and assumes all 198 | risks associated with its exercise of rights under this Agreement, 199 | including but not limited to the risks and costs of program errors, 200 | compliance with applicable laws, damage to or loss of data, programs 201 | or equipment, and unavailability or interruption of operations. 202 | 203 | 6. DISCLAIMER OF LIABILITY 204 | 205 | EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT 206 | PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS 207 | SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 208 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST 209 | PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 210 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 211 | ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE 212 | EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE 213 | POSSIBILITY OF SUCH DAMAGES. 214 | 215 | 7. GENERAL 216 | 217 | If any provision of this Agreement is invalid or unenforceable under 218 | applicable law, it shall not affect the validity or enforceability of 219 | the remainder of the terms of this Agreement, and without further 220 | action by the parties hereto, such provision shall be reformed to the 221 | minimum extent necessary to make such provision valid and enforceable. 222 | 223 | If Recipient institutes patent litigation against any entity 224 | (including a cross-claim or counterclaim in a lawsuit) alleging that the 225 | Program itself (excluding combinations of the Program with other software 226 | or hardware) infringes such Recipient's patent(s), then such Recipient's 227 | rights granted under Section 2(b) shall terminate as of the date such 228 | litigation is filed. 229 | 230 | All Recipient's rights under this Agreement shall terminate if it 231 | fails to comply with any of the material terms or conditions of this 232 | Agreement and does not cure such failure in a reasonable period of 233 | time after becoming aware of such noncompliance. If all Recipient's 234 | rights under this Agreement terminate, Recipient agrees to cease use 235 | and distribution of the Program as soon as reasonably practicable. 236 | However, Recipient's obligations under this Agreement and any licenses 237 | granted by Recipient relating to the Program shall continue and survive. 238 | 239 | Everyone is permitted to copy and distribute copies of this Agreement, 240 | but in order to avoid inconsistency the Agreement is copyrighted and 241 | may only be modified in the following manner. The Agreement Steward 242 | reserves the right to publish new versions (including revisions) of 243 | this Agreement from time to time. No one other than the Agreement 244 | Steward has the right to modify this Agreement. The Eclipse Foundation 245 | is the initial Agreement Steward. The Eclipse Foundation may assign the 246 | responsibility to serve as the Agreement Steward to a suitable separate 247 | entity. Each new version of the Agreement will be given a distinguishing 248 | version number. The Program (including Contributions) may always be 249 | Distributed subject to the version of the Agreement under which it was 250 | received. In addition, after a new version of the Agreement is published, 251 | Contributor may elect to Distribute the Program (including its 252 | Contributions) under the new version. 253 | 254 | Except as expressly stated in Sections 2(a) and 2(b) above, Recipient 255 | receives no rights or licenses to the intellectual property of any 256 | Contributor under this Agreement, whether expressly, by implication, 257 | estoppel or otherwise. All rights in the Program not expressly granted 258 | under this Agreement are reserved. Nothing in this Agreement is intended 259 | to be enforceable by any entity that is not a Contributor or Recipient. 260 | No third-party beneficiary rights are created under this Agreement. 261 | 262 | Exhibit A - Form of Secondary Licenses Notice 263 | 264 | "This Source Code may also be made available under the following 265 | Secondary Licenses when the conditions for such availability set forth 266 | in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), 267 | version(s), and exceptions or additional permissions here}." 268 | 269 | Simply including a copy of this Agreement, including this Exhibit A 270 | is not sufficient to license the Source Code under Secondary Licenses. 271 | 272 | If it is not possible or desirable to put the notice in a particular 273 | file, then You may include the notice in a location (such as a LICENSE 274 | file in a relevant directory) where a recipient would be likely to 275 | look for such a notice. 276 | 277 | You may add additional accurate notices of copyright ownership. 278 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Eclipse ShellWax 2 | 3 | Clone to Eclipse IDE 4 | 5 | ### Shell script edition in Eclipse IDE 6 | 7 | ShellWax is a shell script development plugin for the Eclipse IDE, providing a rich edition experience through integration with the [Bash Language Server](https://github.com/bash-lsp/bash-language-server). 8 | 9 | ## Download/Install 10 | 11 | With Eclipse IDE properly installed on your machine, just click [HERE](eclipse+mpc://marketplace.eclipse.org/install/4528322) 12 | 13 | _OR_ 14 | 15 | Browse to https://marketplace.eclipse.org/content/shellwax and follow installation instructions 16 | 17 | _OR_ 18 | 19 | From a working Eclipse IDE, install from the Update Site at [https://download.eclipse.org/shellwax/snapshots/](https://download.eclipse.org/shellwax/snapshots/). 20 | 21 | ### Prerequisites 22 | In order to use ShellWax on the user machine it's mandatory to have the following installed and available on PATH environment variable: 23 | - Bash (bash). Note: Windows users should have bash installed via [Windows Subsystem For Linux and their distro of choice](https://docs.microsoft.com/en-us/windows/wsl/install-win10). 24 | 25 | 26 | ## Features 27 | 28 | ShellWax brings together multiple different sources of features to make an enjoyable developing environment. Here are just a few of the most common features. Download today to discover all Corrosion has to offer. 29 | 30 | ### Theming 31 | 32 | The syntax highlighting is "externalized" to TM4E plugins. You can configure a theme (in the TextMate meaning of a theme) for specific file type in Preferences > TextMate > Grammar, select a language and then click the "Theme" tab on that same page. 33 | 34 | ### Bash Language Server 35 | The Bash Language Server supplies ShellWax with the majority of the edition abilities. More information can be found at the [Bash Language Server GitHub Repository](https://github.com/bash-lsp/bash-language-server). 36 | - Jump to declaration 37 | - Find references 38 | - Code Outline & Show Symbols 39 | - Highlight occurrences 40 | - Code completion 41 | - Simple diagnostics reporting 42 | - Documentation for flags on hover 43 | 44 | ### License 45 | 46 | ShellWax is an Open Source project licensed under [The Eclipse Public License - v 2.0](https://www.eclipse.org/legal/epl-2.0/) 47 | 48 | [More Licensing Information](LICENSE) 49 | -------------------------------------------------------------------------------- /RELEASE_NOTES.md: -------------------------------------------------------------------------------- 1 | # Eclipse ShellWax: Release notes 2 | 3 | This page describes the noteworthy improvements provided by each release of Eclipse ShellWax. 4 | 5 | 6 | ### Next release... 7 | 8 | ## 1.3.0 9 | 10 | * 📅 Release Date: TBD 11 | * All changes: https://github.com/eclipse/shellwax/compare/1.2.3...1.3.0 12 | 13 | ### Require Java 21 as runtime JVM ### 14 | 15 | * Starting with these ShellWax release it requires Java 21 JVM to be used to run Eclipse for the plugin to work. 16 | 17 | ### Support Format 18 | 19 | * Format command is functional when `shfmt` is installed locally. 20 | 21 | ### Bash LS update ### 22 | * Bash LSP dependency has been updated to version 5.4.0 . See [changelog](https://github.com/bash-lsp/bash-language-server/blob/main/server/CHANGELOG.md#5.4.0 ) for details. 23 | 24 | 25 | ## 1.2.3 26 | 27 | * 📅 Release Date: Jun 6th, 2023 28 | * Bash LSP dependency has been updated to version 4.9.2 . See [changelog](https://github.com/bash-lsp/bash-language-server/blob/main/server/CHANGELOG.md#492 ) for details. 29 | * All changes: https://github.com/eclipse/shellwax/compare/1.2.2...1.2.3 30 | 31 | ## 1.2.2 32 | 33 | * 📅 Release Date: Dec 9th, 2022 34 | * Bash LSP dependency has been updated to version 4.1.0 . See [changelog](https://github.com/bash-lsp/bash-language-server/blob/main/server/CHANGELOG.md) for details. 35 | * All changes: https://github.com/eclipse/shellwax/compare/1.2.1...1.2.2 36 | 37 | ## 1.2.1 38 | 39 | * 📅 Release Date: Aug 25th, 2022 40 | * All changes: https://github.com/eclipse/shellwax/compare/1.2.0...1.2.1 41 | 42 | ## 1.2.0 43 | 44 | * 📅 Release Date: July 12th, 2022 45 | * All changes: https://github.com/eclipse/shellwax/compare/1.1.6...1.2.0 46 | 47 | ### Require Java 17 as runtime JVM ### 48 | 49 | Starting with these ShellWax release it requires Java 17 JVM to be used to run Eclipse for the plugin to work. 50 | 51 | ### Update to Bash LSP 3.0.4 ### 52 | 53 | Bash LSP dependency has been updated to version 3.0.4. See [changelog](https://github.com/bash-lsp/bash-language-server/blob/main/server/CHANGELOG.md) for details. 54 | 55 | ## 1.1.6 56 | 57 | * 📅 Release Date: January 14th, 2022 58 | * All changes: https://github.com/eclipse/shellwax/compare/1.1.5...1.1.6 59 | 60 | ### Add MacOS AArch64 support ### 61 | 62 | Node embedder from latest Wild Web Developer plugin has support for it thus allows installation on MacOS Arm with bundled Node.js so users don't have to manually install it. 63 | 64 | ## 1.1.5 65 | 66 | * 📅 Release Date: November 15th, 2021 67 | * All changes: https://github.com/eclipse/shellwax/compare/1.1.4...1.1.5 68 | 69 | #### Fix content-type detection 70 | 71 | Recent changes made that all files could be interpreted as ShellWax files and thus undesired operations from ShellWax could be shown on unrelated files. This is now fixed. 72 | 73 | ## 1.1.4 74 | 75 | * 📅 Release Date: November 12th, 2021 76 | * All changes: https://github.com/eclipse/shellwax/compare/1.1.3...1.1.4 77 | 78 | #### Support shell script files without extensions 79 | 80 | Files with the following shebang are supported: 81 | - #!/bin/sh 82 | - #!*bash 83 | 84 | ## 1.1.3 85 | 86 | * 📅 Release Date: October 27th, 2021 87 | * All changes: https://github.com/eclipse/shellwax/compare/1.1.2...1.1.3 88 | 89 | #### Mac x86_64 and Linux AArch 64 Node.js embedder to the update site 90 | 91 | #### Update to use Bash Language Server 2.0.0 92 | 93 | Changes in it: 94 | - BREAKING: Drop node 10 support 95 | - Upgrade dependencies 96 | - Adds support for completing command line arguments (https://github.com/bash-lsp/bash-language-server/pull/294) 97 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | _ISO 27005 defines vulnerability as: 3 | "A weakness of an asset or group of assets that can be exploited by one or more threats."_ 4 | 5 | ## The Eclipse Security Team 6 | 7 | The Eclipse Security Team provides help and advice to Eclipse projects 8 | on vulnerability issues and is the first point of contact 9 | for handling security vulnerabilities. 10 | Members of the Security Team are committers on Eclipse Projects 11 | and members of the Eclipse Architecture Council. 12 | 13 | Contact the [Eclipse Security Team](mailto:security@eclipse.org). 14 | 15 | **Note that, as a matter of policy, the security team does not open attachments.** 16 | 17 | ## Reporting a Security Vulnerability 18 | 19 | Vulnerabilities can be reported either via email to the Eclipse Security Team 20 | or directly with a project via the Eclipse Foundation's Bugzilla instance. 21 | 22 | The general security mailing list address is security@eclipse.org. 23 | Members of the Eclipse Security Team will receive messages sent to this address. 24 | This address should be used only for reporting undisclosed vulnerabilities; 25 | regular issue reports and questions unrelated to vulnerabilities in Eclipse software 26 | will be ignored. 27 | Note that this email address is not encrypted. 28 | 29 | The community is also encouraged to report vulnerabilities using the 30 | [Eclipse Foundation's Bugzilla instance](https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Community&component=Vulnerability%20Reports&keywords=security&groups=Security_Advisories). 31 | Note that you will require an Eclipse Foundation account to create an issue report, 32 | but by doing so you will be able to participate directly in the resolution of the issue. 33 | 34 | Issue reports related to vulnerabilities must be marked as "committers-only", 35 | either automatically by clicking the provided link, by the reporter, 36 | or by a committer during the triage process. 37 | Note that issues marked "committers-only" are visible to all Eclipse committers. 38 | By default, a "committers-only" issue is also accessible to the reporter 39 | and individuals explicitly indicated in the "cc" list. 40 | 41 | ## Disclosure 42 | 43 | Disclosure is initially limited to the reporter and all Eclipse Committers, 44 | but is expanded to include other individuals, and the general public. 45 | The timing and manner of disclosure is governed by the 46 | [Eclipse Security Policy](https://www.eclipse.org/security/policy.php). 47 | 48 | Publicly disclosed issues are listed on the 49 | [Disclosed Vulnerabilities Page](https://www.eclipse.org/security/known.php). 50 | -------------------------------------------------------------------------------- /artwork/sh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 20 | 22 | 32 | 35 | 39 | 43 | 44 | 54 | 57 | 61 | 65 | 66 | 76 | 79 | 83 | 87 | 88 | 89 | 112 | 114 | 115 | 117 | image/svg+xml 118 | 120 | 121 | 122 | 123 | 124 | 129 | 135 | 140 | 146 | SH 157 | 164 | 165 | 166 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | org.eclipse.shellwax.core 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.pde.ManifestBuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.pde.SchemaBuilder 20 | 21 | 22 | 23 | 24 | org.eclipse.m2e.core.maven2Builder 25 | 26 | 27 | 28 | 29 | 30 | org.eclipse.m2e.core.maven2Nature 31 | org.eclipse.pde.PluginNature 32 | org.eclipse.jdt.core.javanature 33 | 34 | 35 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate 4 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 5 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 6 | org.eclipse.jdt.core.compiler.compliance=21 7 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 8 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 9 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 10 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 11 | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled 12 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 13 | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning 14 | org.eclipse.jdt.core.compiler.release=enabled 15 | org.eclipse.jdt.core.compiler.source=21 16 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/.settings/org.eclipse.jdt.ui.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true 3 | sp_cleanup.add_all=false 4 | sp_cleanup.add_default_serial_version_id=true 5 | sp_cleanup.add_generated_serial_version_id=false 6 | sp_cleanup.add_missing_annotations=true 7 | sp_cleanup.add_missing_deprecated_annotations=true 8 | sp_cleanup.add_missing_methods=false 9 | sp_cleanup.add_missing_nls_tags=false 10 | sp_cleanup.add_missing_override_annotations=true 11 | sp_cleanup.add_missing_override_annotations_interface_methods=true 12 | sp_cleanup.add_serial_version_id=false 13 | sp_cleanup.also_simplify_lambda=true 14 | sp_cleanup.always_use_blocks=true 15 | sp_cleanup.always_use_parentheses_in_expressions=false 16 | sp_cleanup.always_use_this_for_non_static_field_access=false 17 | sp_cleanup.always_use_this_for_non_static_method_access=false 18 | sp_cleanup.array_with_curly=false 19 | sp_cleanup.arrays_fill=false 20 | sp_cleanup.bitwise_conditional_expression=false 21 | sp_cleanup.boolean_literal=false 22 | sp_cleanup.boolean_value_rather_than_comparison=false 23 | sp_cleanup.break_loop=false 24 | sp_cleanup.collection_cloning=false 25 | sp_cleanup.comparing_on_criteria=false 26 | sp_cleanup.comparison_statement=false 27 | sp_cleanup.controlflow_merge=false 28 | sp_cleanup.convert_functional_interfaces=false 29 | sp_cleanup.convert_to_enhanced_for_loop=false 30 | sp_cleanup.convert_to_enhanced_for_loop_if_loop_var_used=false 31 | sp_cleanup.convert_to_switch_expressions=false 32 | sp_cleanup.correct_indentation=false 33 | sp_cleanup.do_while_rather_than_while=false 34 | sp_cleanup.double_negation=false 35 | sp_cleanup.else_if=false 36 | sp_cleanup.embedded_if=false 37 | sp_cleanup.evaluate_nullable=false 38 | sp_cleanup.extract_increment=false 39 | sp_cleanup.format_source_code=false 40 | sp_cleanup.format_source_code_changes_only=false 41 | sp_cleanup.hash=false 42 | sp_cleanup.if_condition=false 43 | sp_cleanup.insert_inferred_type_arguments=false 44 | sp_cleanup.instanceof=false 45 | sp_cleanup.instanceof_keyword=false 46 | sp_cleanup.invert_equals=false 47 | sp_cleanup.join=false 48 | sp_cleanup.lazy_logical_operator=false 49 | sp_cleanup.make_local_variable_final=true 50 | sp_cleanup.make_parameters_final=false 51 | sp_cleanup.make_private_fields_final=true 52 | sp_cleanup.make_type_abstract_if_missing_method=false 53 | sp_cleanup.make_variable_declarations_final=false 54 | sp_cleanup.map_cloning=false 55 | sp_cleanup.merge_conditional_blocks=false 56 | sp_cleanup.multi_catch=false 57 | sp_cleanup.never_use_blocks=false 58 | sp_cleanup.never_use_parentheses_in_expressions=true 59 | sp_cleanup.no_string_creation=false 60 | sp_cleanup.no_super=false 61 | sp_cleanup.number_suffix=false 62 | sp_cleanup.objects_equals=false 63 | sp_cleanup.on_save_use_additional_actions=false 64 | sp_cleanup.one_if_rather_than_duplicate_blocks_that_fall_through=false 65 | sp_cleanup.operand_factorization=false 66 | sp_cleanup.organize_imports=true 67 | sp_cleanup.overridden_assignment=false 68 | sp_cleanup.overridden_assignment_move_decl=true 69 | sp_cleanup.plain_replacement=false 70 | sp_cleanup.precompile_regex=false 71 | sp_cleanup.primitive_comparison=false 72 | sp_cleanup.primitive_parsing=false 73 | sp_cleanup.primitive_rather_than_wrapper=false 74 | sp_cleanup.primitive_serialization=false 75 | sp_cleanup.pull_out_if_from_if_else=false 76 | sp_cleanup.pull_up_assignment=false 77 | sp_cleanup.push_down_negation=false 78 | sp_cleanup.qualify_static_field_accesses_with_declaring_class=false 79 | sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true 80 | sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true 81 | sp_cleanup.qualify_static_member_accesses_with_declaring_class=false 82 | sp_cleanup.qualify_static_method_accesses_with_declaring_class=false 83 | sp_cleanup.reduce_indentation=false 84 | sp_cleanup.redundant_comparator=false 85 | sp_cleanup.redundant_falling_through_block_end=false 86 | sp_cleanup.remove_private_constructors=true 87 | sp_cleanup.remove_redundant_modifiers=false 88 | sp_cleanup.remove_redundant_semicolons=false 89 | sp_cleanup.remove_redundant_type_arguments=false 90 | sp_cleanup.remove_trailing_whitespaces=false 91 | sp_cleanup.remove_trailing_whitespaces_all=true 92 | sp_cleanup.remove_trailing_whitespaces_ignore_empty=false 93 | sp_cleanup.remove_unnecessary_array_creation=false 94 | sp_cleanup.remove_unnecessary_casts=true 95 | sp_cleanup.remove_unnecessary_nls_tags=false 96 | sp_cleanup.remove_unnecessary_suppress_warnings=false 97 | sp_cleanup.remove_unused_imports=false 98 | sp_cleanup.remove_unused_local_variables=false 99 | sp_cleanup.remove_unused_method_parameters=false 100 | sp_cleanup.remove_unused_private_fields=true 101 | sp_cleanup.remove_unused_private_members=false 102 | sp_cleanup.remove_unused_private_methods=true 103 | sp_cleanup.remove_unused_private_types=true 104 | sp_cleanup.replace_deprecated_calls=false 105 | sp_cleanup.return_expression=false 106 | sp_cleanup.simplify_boolean_if_else=false 107 | sp_cleanup.simplify_lambda_expression_and_method_ref=false 108 | sp_cleanup.single_used_field=false 109 | sp_cleanup.sort_members=false 110 | sp_cleanup.sort_members_all=false 111 | sp_cleanup.standard_comparison=false 112 | sp_cleanup.static_inner_class=false 113 | sp_cleanup.strictly_equal_or_different=false 114 | sp_cleanup.stringbuffer_to_stringbuilder=false 115 | sp_cleanup.stringbuilder=false 116 | sp_cleanup.stringbuilder_for_local_vars=true 117 | sp_cleanup.stringconcat_stringbuffer_stringbuilder=false 118 | sp_cleanup.stringconcat_to_textblock=false 119 | sp_cleanup.substring=false 120 | sp_cleanup.switch=false 121 | sp_cleanup.switch_for_instanceof_pattern=false 122 | sp_cleanup.system_property=false 123 | sp_cleanup.system_property_boolean=false 124 | sp_cleanup.system_property_file_encoding=false 125 | sp_cleanup.system_property_file_separator=false 126 | sp_cleanup.system_property_javaspecversion=false 127 | sp_cleanup.system_property_javaversion=false 128 | sp_cleanup.system_property_line_separator=false 129 | sp_cleanup.system_property_path_separator=false 130 | sp_cleanup.ternary_operator=false 131 | sp_cleanup.try_with_resource=false 132 | sp_cleanup.unlooped_while=false 133 | sp_cleanup.unreachable_block=false 134 | sp_cleanup.use_anonymous_class_creation=false 135 | sp_cleanup.use_autoboxing=false 136 | sp_cleanup.use_blocks=true 137 | sp_cleanup.use_blocks_only_for_return_and_throw=false 138 | sp_cleanup.use_directly_map_method=false 139 | sp_cleanup.use_lambda=true 140 | sp_cleanup.use_parentheses_in_expressions=false 141 | sp_cleanup.use_string_is_blank=false 142 | sp_cleanup.use_this_for_non_static_field_access=false 143 | sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true 144 | sp_cleanup.use_this_for_non_static_method_access=false 145 | sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true 146 | sp_cleanup.use_unboxing=false 147 | sp_cleanup.use_var=false 148 | sp_cleanup.useless_continue=false 149 | sp_cleanup.useless_return=false 150 | sp_cleanup.valueof_rather_than_instantiation=false 151 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/.settings/org.eclipse.pde.prefs: -------------------------------------------------------------------------------- 1 | compilers.f.unresolved-features=1 2 | compilers.f.unresolved-plugins=1 3 | compilers.incompatible-environment=1 4 | compilers.p.build=1 5 | compilers.p.build.bin.includes=1 6 | compilers.p.build.encodings=2 7 | compilers.p.build.java.compiler=2 8 | compilers.p.build.java.compliance=1 9 | compilers.p.build.missing.output=2 10 | compilers.p.build.output.library=1 11 | compilers.p.build.source.library=1 12 | compilers.p.build.src.includes=1 13 | compilers.p.deprecated=1 14 | compilers.p.discouraged-class=1 15 | compilers.p.internal=1 16 | compilers.p.missing-packages=2 17 | compilers.p.missing-version-export-package=2 18 | compilers.p.missing-version-import-package=2 19 | compilers.p.missing-version-require-bundle=2 20 | compilers.p.no-required-att=0 21 | compilers.p.no.automatic.module=1 22 | compilers.p.not-externalized-att=2 23 | compilers.p.service.component.without.lazyactivation=1 24 | compilers.p.unknown-attribute=1 25 | compilers.p.unknown-class=1 26 | compilers.p.unknown-element=1 27 | compilers.p.unknown-identifier=1 28 | compilers.p.unknown-resource=1 29 | compilers.p.unresolved-ex-points=0 30 | compilers.p.unresolved-import=0 31 | compilers.s.create-docs=false 32 | compilers.s.doc-folder=doc 33 | compilers.s.open-tags=1 34 | eclipse.preferences.version=1 35 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Bundle-ManifestVersion: 2 3 | Bundle-Name: ShellWax 4 | Bundle-SymbolicName: org.eclipse.shellwax.core;singleton:=true 5 | Bundle-Version: 1.3.0.qualifier 6 | Bundle-Vendor: Eclipse.org - ShellWax 7 | Automatic-Module-Name: org.eclipse.shellwax.core 8 | Bundle-RequiredExecutionEnvironment: JavaSE-21 9 | Eclipse-BundleShape: dir 10 | Require-Bundle: org.eclipse.ui.genericeditor, 11 | org.eclipse.tm4e.ui;bundle-version="0.12.0", 12 | org.eclipse.lsp4e;bundle-version="0.18.6", 13 | org.eclipse.core.runtime;bundle-version="3.31.0", 14 | org.eclipse.debug.core, 15 | org.eclipse.debug.ui, 16 | org.eclipse.jface, 17 | org.eclipse.ui.workbench, 18 | org.eclipse.ui.ide, 19 | org.eclipse.core.resources, 20 | org.eclipse.ui.console, 21 | org.eclipse.core.filebuffers, 22 | org.eclipse.text, 23 | org.eclipse.core.jobs, 24 | org.eclipse.wildwebdeveloper.embedder.node;bundle-version="1.0.7", 25 | org.eclipse.tm4e.language_pack;bundle-version="0.12.0" 26 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/build.properties: -------------------------------------------------------------------------------- 1 | source.. = src/ 2 | output.. = target/classes/ 3 | bin.includes = META-INF/,\ 4 | .,\ 5 | plugin.xml,\ 6 | icons/\ 7 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/icons/sh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-shellwax/shellwax/ef36739e0e226482f5a6f641327d1ab5f24e10a8/org.eclipse.shellwax.core/icons/sh.png -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/icons/sh@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/eclipse-shellwax/shellwax/ef36739e0e226482f5a6f641327d1ab5f24e10a8/org.eclipse.shellwax.core/icons/sh@2x.png -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 12 | 13 | 20 | 21 | 22 | 24 | 27 | 28 | 29 | 31 | 34 | 35 | 38 | 39 | 40 | 42 | 45 | 46 | 47 | 49 | 53 | 54 | 57 | 58 | 61 | 62 | 63 | 64 | 65 | 66 | 71 | 72 | 73 | 74 | 76 | 82 | 83 | 84 | 86 | 88 | 89 | 90 | 91 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 105 | 109 | 110 | 111 | 113 | 117 | 118 | 119 | 123 | 126 | 127 | 128 | 129 | 132 | 135 | 136 | 137 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/src/org/eclipse/shellwax/internal/BashLanguageServer.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2019, 2025 Red Hat Inc. and others. 3 | * 4 | * This program and the accompanying materials are made 5 | * available under the terms of the Eclipse Public License 2.0 6 | * which is available at https://www.eclipse.org/legal/epl-2.0/ 7 | * 8 | * SPDX-License-Identifier: EPL-2.0 9 | * 10 | * Contributors: 11 | * Alexander Kurtakov (Red Hat Inc.)- initial implementation 12 | *******************************************************************************/ 13 | package org.eclipse.shellwax.internal; 14 | 15 | import java.io.File; 16 | import java.io.IOException; 17 | import java.util.ArrayList; 18 | import java.util.List; 19 | import java.util.concurrent.CompletableFuture; 20 | 21 | import org.eclipse.core.runtime.Platform; 22 | import org.eclipse.lsp4e.server.ProcessStreamConnectionProvider; 23 | import org.eclipse.wildwebdeveloper.embedder.node.NodeJSManager; 24 | 25 | public class BashLanguageServer extends ProcessStreamConnectionProvider { 26 | private static final String LS_VERSION = "5.6.0"; 27 | private static final String LOCAL_PATH = "/.local/share/shellwax/"+LS_VERSION; 28 | private static final String LS_MAIN = "/node_modules/.bin/bash-language-server"; 29 | 30 | private static CompletableFuture initializeFuture; 31 | 32 | private static String getLsPath() { 33 | String lsPath = System.getProperty("user.home") + LOCAL_PATH + LS_MAIN; 34 | if (Platform.OS.isWindows()) 35 | lsPath = lsPath.replace('/', '\\'); 36 | return lsPath; 37 | } 38 | 39 | private static boolean isInstalled() { 40 | File installLocation = new File(getLsPath()); 41 | return installLocation.exists() && installLocation.canExecute(); 42 | } 43 | 44 | public BashLanguageServer() { 45 | List commands = new ArrayList<>(); 46 | String nodePath = NodeJSManager.getNodeJsLocation().getAbsolutePath(); 47 | 48 | if (nodePath != null) { 49 | if (!isInstalled()) { 50 | installLS(); 51 | } 52 | String lsPath = getLsPath(); 53 | if (Platform.OS.isWindows()) { 54 | commands.add("cmd"); 55 | commands.add("/c"); 56 | // quoting lsPath to support spaces in username 57 | commands.add("\"\"" + lsPath + "\" start\""); 58 | } else { 59 | commands.add(nodePath); 60 | commands.add(lsPath); 61 | commands.add("start"); 62 | } 63 | setCommands(commands); 64 | setWorkingDirectory(System.getProperty("user.dir")); 65 | } 66 | } 67 | 68 | @Override 69 | public void start() throws IOException { 70 | if (!isInstalled()) { 71 | installLS().join(); 72 | } 73 | super.start(); 74 | } 75 | 76 | /** 77 | * Creates and asynchronously runs a runnable for the Bash Language Server module 78 | * installation if it's not yet created. Returns the CompletableFuture object to follow the 79 | * installation runnable that allows at least to wait for the finishing of the installation. 80 | * 81 | * @return CompletableFuture for the installation runnable 82 | */ 83 | private synchronized CompletableFuture installLS() { 84 | if (initializeFuture == null) { 85 | initializeFuture = CompletableFuture.runAsync(() -> { 86 | File installLocation = new File(System.getProperty("user.home") + LOCAL_PATH); 87 | if (!installLocation.isDirectory()) 88 | installLocation.delete(); 89 | if (!installLocation.exists()) { 90 | installLocation.mkdirs(); 91 | File nodeModulesDir = new File(installLocation, "node_modules"); 92 | nodeModulesDir.mkdir(); 93 | } 94 | ProcessBuilder pb = NodeJSManager.prepareNPMProcessBuilder("install","--prefix=.","bash-language-server@"+LS_VERSION); 95 | pb.directory(installLocation); 96 | pb.inheritIO(); // Redirects stdout and stderr to System.out 97 | try { 98 | Process ps = pb.start(); 99 | ps.waitFor(); 100 | } catch (IOException | InterruptedException e) { 101 | e.printStackTrace(); 102 | } 103 | }); 104 | } 105 | return initializeFuture; 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/src/org/eclipse/shellwax/internal/BashShebangContentDescriber.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2021 Red Hat Inc. and others. 3 | * 4 | * This program and the accompanying materials are made 5 | * available under the terms of the Eclipse Public License 2.0 6 | * which is available at https://www.eclipse.org/legal/epl-2.0/ 7 | * 8 | * SPDX-License-Identifier: EPL-2.0 9 | *******************************************************************************/ 10 | package org.eclipse.shellwax.internal; 11 | 12 | import java.io.BufferedReader; 13 | import java.io.IOException; 14 | import java.io.InputStream; 15 | import java.io.InputStreamReader; 16 | import java.io.Reader; 17 | 18 | import org.eclipse.core.runtime.QualifiedName; 19 | import org.eclipse.core.runtime.content.IContentDescription; 20 | import org.eclipse.core.runtime.content.ITextContentDescriber; 21 | 22 | public class BashShebangContentDescriber implements ITextContentDescriber { 23 | 24 | @Override 25 | public int describe(InputStream contents, IContentDescription description) throws IOException { 26 | return describe(new InputStreamReader(contents), description); 27 | } 28 | 29 | @Override 30 | public QualifiedName[] getSupportedOptions() { 31 | return null; 32 | } 33 | 34 | @Override 35 | public int describe(Reader contents, IContentDescription description) throws IOException { 36 | if (description == null || description.getContentType() == null || !"org.eclipse.shellwax.shebang".equals(description.getContentType().getId())) { 37 | return INVALID; 38 | } 39 | BufferedReader reader = new BufferedReader(contents); 40 | String line = reader.readLine(); 41 | if (line == null) { 42 | return INVALID; 43 | } 44 | if (line.startsWith("#!") && (line.contains("bash")|| line.contains("bin/sh"))) { 45 | return VALID; 46 | } 47 | return INVALID; 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/src/org/eclipse/shellwax/internal/ShDocumentSetupParticipant.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2019 Red Hat Inc. and others. 3 | * 4 | * This program and the accompanying materials are made 5 | * available under the terms of the Eclipse Public License 2.0 6 | * which is available at https://www.eclipse.org/legal/epl-2.0/ 7 | * 8 | * SPDX-License-Identifier: EPL-2.0 9 | * 10 | * Contributors: 11 | * Alexander Kurtakov (Red Hat Inc.)- initial implementation 12 | *******************************************************************************/ 13 | package org.eclipse.shellwax.internal; 14 | 15 | import org.eclipse.core.filebuffers.IDocumentSetupParticipant; 16 | import org.eclipse.jface.text.IDocument; 17 | import org.eclipse.jface.text.IDocumentExtension4; 18 | 19 | /** 20 | * Files of type sh should always have unix line delimiter. This ensures it for newly created files even on windows. 21 | * 22 | */ 23 | public class ShDocumentSetupParticipant implements IDocumentSetupParticipant { 24 | 25 | @Override 26 | public void setup(IDocument document) { 27 | if (document instanceof IDocumentExtension4 doc) { 28 | doc.setInitialLineDelimiter("\n"); 29 | } 30 | 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/src/org/eclipse/shellwax/internal/run/ShLaunchConfig.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2019, 2024 Red Hat Inc. and others. 3 | * 4 | * This program and the accompanying materials are made 5 | * available under the terms of the Eclipse Public License 2.0 6 | * which is available at https://www.eclipse.org/legal/epl-2.0/ 7 | * 8 | * SPDX-License-Identifier: EPL-2.0 9 | * 10 | * Contributors: 11 | * Alexander Kurtakov (Red Hat Inc.)- initial implementation 12 | *******************************************************************************/ 13 | package org.eclipse.shellwax.internal.run; 14 | 15 | import java.io.File; 16 | import java.io.IOException; 17 | import java.util.ArrayList; 18 | import java.util.List; 19 | 20 | import org.eclipse.core.runtime.CoreException; 21 | import org.eclipse.core.runtime.IPath; 22 | import org.eclipse.core.runtime.IProgressMonitor; 23 | import org.eclipse.core.runtime.Path; 24 | import org.eclipse.core.runtime.Platform; 25 | import org.eclipse.debug.core.DebugPlugin; 26 | import org.eclipse.debug.core.ILaunch; 27 | import org.eclipse.debug.core.ILaunchConfiguration; 28 | import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; 29 | import org.eclipse.debug.core.model.LaunchConfigurationDelegate; 30 | 31 | public class ShLaunchConfig extends LaunchConfigurationDelegate { 32 | 33 | public static final String ID = "org.eclipse.shellwax.shlaunchonfigtype"; 34 | public static final String PROGRAM = "org.eclipse.shellwax.launch.program"; 35 | public static final String ARGUMENTS = "org.eclipse.shellwax.launch.arguments"; 36 | 37 | @Override 38 | public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) 39 | throws CoreException { 40 | ILaunchConfigurationWorkingCopy wc = configuration.getWorkingCopy(); 41 | List command = new ArrayList<>(); 42 | String shellPath = wc.getAttribute(PROGRAM, ""); 43 | String[] shellParams = wc.getAttribute(ARGUMENTS, "").split(" "); 44 | String workDir = wc.getAttribute(DebugPlugin.ATTR_WORKING_DIRECTORY, ""); 45 | if (workDir.isEmpty()) { 46 | IPath path = new Path(shellPath); 47 | path = path.removeLastSegments(1); 48 | workDir = path.toPortableString(); 49 | } 50 | String executable = "sh"; 51 | if (Platform.OS.isWindows()) { 52 | executable = "bash.exe"; 53 | String drive = Character.toString(shellPath.charAt(0)); 54 | shellPath = "/mnt/"+drive.toLowerCase()+"/"+shellPath.substring(2); 55 | } 56 | command.add(executable); 57 | command.add(shellPath); 58 | command.addAll(List.of(shellParams)); 59 | try { 60 | ProcessBuilder pb = new ProcessBuilder(command.toArray(String[]::new)); 61 | pb.directory(new File(workDir)); 62 | final Process p = pb.start(); 63 | DebugPlugin.newProcess(launch, p, shellPath); 64 | } catch (IOException ex) { 65 | ex.printStackTrace(); 66 | } 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/src/org/eclipse/shellwax/internal/run/ShLaunchShortcut.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2019, 2022 Red Hat Inc. and others. 3 | * 4 | * This program and the accompanying materials are made 5 | * available under the terms of the Eclipse Public License 2.0 6 | * which is available at https://www.eclipse.org/legal/epl-2.0/ 7 | * 8 | * SPDX-License-Identifier: EPL-2.0 9 | * 10 | * Contributors: 11 | * Alexander Kurtakov (Red Hat Inc.)- initial implementation 12 | *******************************************************************************/ 13 | package org.eclipse.shellwax.internal.run; 14 | 15 | import java.util.Arrays; 16 | import java.util.concurrent.CompletableFuture; 17 | 18 | import org.eclipse.core.resources.IResource; 19 | import org.eclipse.core.runtime.Adapters; 20 | import org.eclipse.core.runtime.CoreException; 21 | import org.eclipse.core.runtime.NullProgressMonitor; 22 | import org.eclipse.debug.core.DebugPlugin; 23 | import org.eclipse.debug.core.ILaunchConfiguration; 24 | import org.eclipse.debug.core.ILaunchConfigurationType; 25 | import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; 26 | import org.eclipse.debug.core.ILaunchManager; 27 | import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationSelectionDialog; 28 | import org.eclipse.debug.ui.ILaunchShortcut2; 29 | import org.eclipse.jface.dialogs.ErrorDialog; 30 | import org.eclipse.jface.dialogs.IDialogConstants; 31 | import org.eclipse.jface.viewers.ISelection; 32 | import org.eclipse.jface.viewers.IStructuredSelection; 33 | import org.eclipse.swt.widgets.Display; 34 | import org.eclipse.ui.IEditorInput; 35 | import org.eclipse.ui.IEditorPart; 36 | import org.eclipse.ui.part.FileEditorInput; 37 | 38 | public class ShLaunchShortcut implements ILaunchShortcut2 { 39 | 40 | @Override 41 | public void launch(ISelection selection, String mode) { 42 | launch(mode, getLaunchConfigurations(selection)); 43 | } 44 | 45 | @Override 46 | public void launch(IEditorPart editor, String mode) { 47 | launch(mode, getLaunchConfigurations(editor)); 48 | } 49 | 50 | @Override 51 | public ILaunchConfiguration[] getLaunchConfigurations(ISelection selection) { 52 | return getLaunchConfigurations(getLaunchableResource(selection)); 53 | } 54 | 55 | @Override 56 | public ILaunchConfiguration[] getLaunchConfigurations(IEditorPart editor) { 57 | return getLaunchConfigurations(getLaunchableResource(editor)); 58 | } 59 | 60 | @Override 61 | public IResource getLaunchableResource(ISelection selection) { 62 | if (selection instanceof IStructuredSelection structuredSelection) { 63 | if (structuredSelection.size() != 1) { 64 | return null; 65 | } 66 | Object firstObject = structuredSelection.getFirstElement(); 67 | return Adapters.adapt(firstObject, IResource.class); 68 | } 69 | return null; 70 | } 71 | 72 | @Override 73 | public IResource getLaunchableResource(IEditorPart editor) { 74 | IEditorInput input = editor.getEditorInput(); 75 | if (input instanceof FileEditorInput file) { 76 | return file.getFile(); 77 | } 78 | return null; 79 | } 80 | 81 | private ILaunchConfiguration[] getLaunchConfigurations(IResource resource) { 82 | if (resource == null || !resource.isAccessible()) { 83 | return new ILaunchConfiguration[0]; 84 | } 85 | ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); 86 | ILaunchConfigurationType configType = launchManager.getLaunchConfigurationType(ShLaunchConfig.ID); 87 | try { 88 | ILaunchConfiguration[] existing = Arrays.stream(launchManager.getLaunchConfigurations(configType)) 89 | .filter(launchConfig -> { 90 | try { 91 | return launchConfig.getAttribute(ShLaunchConfig.PROGRAM, "") //$NON-NLS-1$ 92 | .equals(resource.getLocation().toFile().toString()); 93 | } catch (CoreException e) { 94 | ErrorDialog.openError(Display.getDefault().getActiveShell(), "error", e.getMessage(), e.getStatus()); //$NON-NLS-1$ 95 | return false; 96 | } 97 | }).toArray(ILaunchConfiguration[]::new); 98 | if (existing.length != 0) { 99 | return existing; 100 | } 101 | String configName = launchManager.generateLaunchConfigurationName(resource.toString()); 102 | ILaunchConfigurationWorkingCopy wc = configType.newInstance(null, configName); 103 | wc.setAttribute(ShLaunchConfig.PROGRAM, resource.getLocation().toString()); 104 | wc.setAttribute(DebugPlugin.ATTR_WORKING_DIRECTORY, 105 | resource.getLocation().removeLastSegments(1).toString()); 106 | wc.doSave(); 107 | return new ILaunchConfiguration[] { wc }; 108 | } catch (CoreException e) { 109 | ErrorDialog.openError(Display.getDefault().getActiveShell(), "error", e.getMessage(), e.getStatus()); //$NON-NLS-1$ 110 | } 111 | return null; 112 | } 113 | 114 | private void launch(String mode, ILaunchConfiguration[] configurations) { 115 | if (configurations.length == 1) { 116 | CompletableFuture.runAsync(() -> { 117 | try { 118 | configurations[0].launch(mode, new NullProgressMonitor()); 119 | } catch (CoreException e) { 120 | ErrorDialog.openError(Display.getDefault().getActiveShell(), "error", e.getMessage(), //$NON-NLS-1$ 121 | e.getStatus()); 122 | } 123 | }); 124 | } else if (configurations.length > 1) { 125 | LaunchConfigurationSelectionDialog dialog = new LaunchConfigurationSelectionDialog( 126 | Display.getDefault().getActiveShell(), configurations); 127 | if (dialog.open() == IDialogConstants.OK_ID) { 128 | launch(mode, Arrays.asList(dialog.getResult()).toArray(ILaunchConfiguration[]::new)); 129 | } 130 | } 131 | } 132 | 133 | } 134 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/src/org/eclipse/shellwax/internal/run/ShMainTab.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2019, 2024 Red Hat Inc. and others. 3 | * 4 | * This program and the accompanying materials are made 5 | * available under the terms of the Eclipse Public License 2.0 6 | * which is available at https://www.eclipse.org/legal/epl-2.0/ 7 | * 8 | * SPDX-License-Identifier: EPL-2.0 9 | * 10 | * Contributors: 11 | * Alexander Kurtakov (Red Hat Inc.)- initial implementation 12 | *******************************************************************************/ 13 | package org.eclipse.shellwax.internal.run; 14 | 15 | import java.io.File; 16 | 17 | import org.eclipse.core.runtime.CoreException; 18 | import org.eclipse.core.runtime.ILog; 19 | import org.eclipse.debug.core.DebugPlugin; 20 | import org.eclipse.debug.core.ILaunchConfiguration; 21 | import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; 22 | import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; 23 | import org.eclipse.jface.fieldassist.ControlDecoration; 24 | import org.eclipse.jface.fieldassist.FieldDecoration; 25 | import org.eclipse.jface.fieldassist.FieldDecorationRegistry; 26 | import org.eclipse.swt.SWT; 27 | import org.eclipse.swt.layout.GridData; 28 | import org.eclipse.swt.layout.GridLayout; 29 | import org.eclipse.swt.widgets.Composite; 30 | import org.eclipse.swt.widgets.Label; 31 | import org.eclipse.swt.widgets.Text; 32 | 33 | public class ShMainTab extends AbstractLaunchConfigurationTab { 34 | 35 | private Text programPathText; 36 | private Text argumentsText; 37 | private Text workingDirectoryText; 38 | 39 | @Override 40 | public void createControl(Composite parent) { 41 | Composite resComposite = new Composite(parent, SWT.NONE); 42 | resComposite.setLayout(new GridLayout(2, false)); 43 | new Label(resComposite, SWT.NONE).setText("Shell script"); 44 | this.programPathText = new Text(resComposite, SWT.BORDER); 45 | this.programPathText.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false)); 46 | ControlDecoration decoration = new ControlDecoration(programPathText, SWT.TOP | SWT.LEFT); 47 | FieldDecoration fieldDecoration = FieldDecorationRegistry.getDefault() 48 | .getFieldDecoration(FieldDecorationRegistry.DEC_ERROR); 49 | decoration.setImage(fieldDecoration.getImage()); 50 | this.programPathText.addModifyListener(event -> { 51 | setDirty(true); 52 | File file = new File(programPathText.getText()); 53 | if (!file.isFile()) { 54 | String errorMessage = "Given path doesn't reference a file."; 55 | setErrorMessage(errorMessage); 56 | decoration.setDescriptionText(errorMessage); 57 | decoration.show(); 58 | } else if (!file.canRead()) { 59 | String errorMessage = "Not allowed to read file."; 60 | setErrorMessage(errorMessage); 61 | decoration.setDescriptionText(errorMessage); 62 | decoration.show(); 63 | } else { 64 | setErrorMessage(null); 65 | decoration.hide(); 66 | } 67 | updateLaunchConfigurationDialog(); 68 | }); 69 | new Label(resComposite, SWT.NONE).setText("Arguments"); 70 | this.argumentsText = new Text(resComposite, SWT.BORDER); 71 | this.argumentsText.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false)); 72 | this.argumentsText.addModifyListener(e -> { 73 | setDirty(true); 74 | updateLaunchConfigurationDialog(); 75 | }); 76 | new Label(resComposite, SWT.NONE).setText("Working directory"); 77 | this.workingDirectoryText = new Text(resComposite, SWT.BORDER); 78 | this.workingDirectoryText.setLayoutData(new GridData(SWT.FILL, SWT.DEFAULT, true, false)); 79 | this.workingDirectoryText.addModifyListener(e -> { 80 | setDirty(true); 81 | updateLaunchConfigurationDialog(); 82 | }); 83 | setControl(resComposite); 84 | } 85 | 86 | @Override 87 | public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { 88 | // Nothing to do 89 | } 90 | 91 | @Override 92 | public void initializeFrom(ILaunchConfiguration configuration) { 93 | try { 94 | this.programPathText.setText(configuration.getAttribute(ShLaunchConfig.PROGRAM, "")); //$NON-NLS-1$ 95 | this.argumentsText.setText(configuration.getAttribute(ShLaunchConfig.ARGUMENTS, "")); //$NON-NLS-1$ 96 | this.workingDirectoryText.setText(configuration.getAttribute(DebugPlugin.ATTR_WORKING_DIRECTORY, "")); //$NON-NLS-1$ 97 | } catch (CoreException e) { 98 | ILog.get().log(e.getStatus()); 99 | } 100 | } 101 | 102 | @Override 103 | public void performApply(ILaunchConfigurationWorkingCopy configuration) { 104 | configuration.setAttribute(ShLaunchConfig.PROGRAM, this.programPathText.getText()); 105 | configuration.setAttribute(ShLaunchConfig.ARGUMENTS, this.argumentsText.getText()); 106 | configuration.setAttribute(DebugPlugin.ATTR_WORKING_DIRECTORY, this.workingDirectoryText.getText()); 107 | } 108 | 109 | @Override 110 | public String getName() { 111 | return "Shell script"; 112 | } 113 | 114 | } 115 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.core/src/org/eclipse/shellwax/internal/run/ShTabGroup.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright (c) 2019, 2022 Red Hat Inc. and others. 3 | * 4 | * This program and the accompanying materials are made 5 | * available under the terms of the Eclipse Public License 2.0 6 | * which is available at https://www.eclipse.org/legal/epl-2.0/ 7 | * 8 | * SPDX-License-Identifier: EPL-2.0 9 | * 10 | * Contributors: 11 | * Alexander Kurtakov (Red Hat Inc.)- initial implementation 12 | *******************************************************************************/ 13 | package org.eclipse.shellwax.internal.run; 14 | 15 | import org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup; 16 | import org.eclipse.debug.ui.CommonTab; 17 | import org.eclipse.debug.ui.ILaunchConfigurationDialog; 18 | 19 | public class ShTabGroup extends AbstractLaunchConfigurationTabGroup { 20 | 21 | @Override 22 | public void createTabs(ILaunchConfigurationDialog dialog, String mode) { 23 | setTabs(new ShMainTab(), new CommonTab()); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.feature/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.feature/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | org.eclipse.shellwax.feature 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.pde.FeatureBuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.m2e.core.maven2Builder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.m2e.core.maven2Nature 21 | org.eclipse.pde.FeatureNature 22 | 23 | 24 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.feature/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.feature/build.properties: -------------------------------------------------------------------------------- 1 | bin.includes = feature.xml,\ 2 | feature.properties 3 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.feature/feature.properties: -------------------------------------------------------------------------------- 1 | name=ShellWax 2 | description=ShellWax shell script editing tool. 3 | copyright=Copyright (c) 2019 Red Hat Inc. and others.\ 4 | \ 5 | This program and the accompanying materials are made\ 6 | available under the terms of the Eclipse Public License 2.0\ 7 | which is available at https://www.eclipse.org/legal/epl-2.0/\ 8 | \ 9 | SPDX-License-Identifier: EPL-2.0\ -------------------------------------------------------------------------------- /org.eclipse.shellwax.feature/feature.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | %description 11 | 12 | 13 | 14 | %copyright 15 | 16 | 17 | 18 | %license 19 | 20 | 21 | 22 | 23 | 24 | 25 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.site/.gitignore: -------------------------------------------------------------------------------- 1 | /target/ 2 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.site/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | org.eclipse.shellwax.site 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.m2e.core.maven2Builder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.m2e.core.maven2Nature 16 | 17 | 18 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.site/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.site/category.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.site/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | org.eclipse.shellwax 7 | org.eclipse.shellwax 8 | 1.3.0-SNAPSHOT 9 | 10 | org.eclipse.shellwax.site.eclipse-repository 11 | eclipse-repository 12 | org.eclipse.shellwax.site.eclipse-repository 13 | 14 | 15 | sign 16 | 17 | 18 | 19 | org.eclipse.tycho 20 | tycho-gpg-plugin 21 | ${tycho.version} 22 | 23 | 24 | pgpsigner 25 | 26 | sign-p2-artifacts 27 | 28 | 29 | bc 30 | 729D9237ED2F6658 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /org.eclipse.shellwax.target/target-platform.target: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | org.eclipse.shellwax 7 | org.eclipse.shellwax 8 | 1.3.0-SNAPSHOT 9 | pom 10 | org.eclipse.shellwax :: parent 11 | org.eclipse.shellwax parent 12 | 13 | 14 | UTF-8 15 | UTF-8 16 | 4.0.13 17 | 18 | -Xmx512m 19 | 20 | 21 | 22 | 23 | 24 | 25 | org.eclipse.tycho 26 | tycho-maven-plugin 27 | ${tycho.version} 28 | true 29 | 30 | 31 | org.eclipse.tycho 32 | target-platform-configuration 33 | ${tycho.version} 34 | 35 | 36 | ${maven.multiModuleProjectDirectory}/org.eclipse.shellwax.target/target-platform.target 37 | 38 | 39 | 40 | linux 41 | gtk 42 | x86_64 43 | 44 | 45 | linux 46 | gtk 47 | aarch64 48 | 49 | 50 | win32 51 | win32 52 | x86_64 53 | 54 | 55 | macosx 56 | cocoa 57 | x86_64 58 | 59 | 60 | macosx 61 | cocoa 62 | aarch64 63 | 64 | 65 | 66 | 67 | 68 | org.eclipse.tycho 69 | tycho-source-plugin 70 | ${tycho.version} 71 | 72 | 73 | attach-source 74 | 75 | plugin-source 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | org.apache.maven.plugins 86 | maven-resources-plugin 87 | 3.3.1 88 | 89 | 90 | org.apache.maven.plugins 91 | maven-clean-plugin 92 | 3.4.1 93 | 94 | 95 | org.eclipse.tycho 96 | tycho-packaging-plugin 97 | ${tycho.version} 98 | 99 | yyyyMMdd-HHmm 100 | 101 | 102 | 103 | org.eclipse.tycho 104 | tycho-compiler-plugin 105 | ${tycho.version} 106 | 107 | javac 108 | 109 | 110 | 111 | org.eclipse.tycho 112 | tycho-surefire-plugin 113 | ${tycho.version} 114 | 115 | true 116 | ${tycho.test.jvmArgs} 117 | 119 | 60 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | macosx 128 | 129 | 130 | mac 131 | 132 | 133 | 134 | -XstartOnFirstThread 135 | 136 | 137 | 138 | source-feature 139 | 140 | 141 | feature.xml 142 | 143 | 144 | 145 | 146 | 147 | org.eclipse.tycho 148 | tycho-source-plugin 149 | ${tycho.version} 150 | 151 | 152 | feature-source 153 | package 154 | 155 | feature-source 156 | 157 | 158 | 159 | 160 | 161 | org.eclipse.tycho 162 | tycho-p2-plugin 163 | ${tycho.version} 164 | 165 | 166 | attach-p2-metadata 167 | package 168 | 169 | p2-metadata 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | org.eclipse.shellwax.core 180 | org.eclipse.shellwax.feature 181 | org.eclipse.shellwax.site 182 | 183 | --------------------------------------------------------------------------------