Merge branch 'master' into pr/67

This commit is contained in:
Amin Yahyaabadi 2022-06-30 00:32:26 -07:00
commit 9a775082dd
315 changed files with 17070 additions and 4249 deletions

20
.github/renovate.json vendored Normal file
View File

@ -0,0 +1,20 @@
{
"schedule": ["every weekend"],
"labels": ["dependencies"],
"separateMajorMinor": "false",
"packageRules": [
{
"matchDepTypes": ["devDependencies"],
"matchUpdateTypes": ["major", "minor", "patch", "pin", "digest", "lockFileMaintenance", "rollback", "bump"],
"groupName": "devDependencies",
"semanticCommitType": "chore",
"automerge": true
},
{
"matchDepTypes": ["dependencies"],
"matchUpdateTypes": ["major", "minor", "patch", "pin", "digest", "lockFileMaintenance", "rollback", "bump"],
"groupName": "dependencies",
"semanticCommitType": "fix"
}
]
}

4
.gitignore vendored
View File

@ -9,13 +9,13 @@ Thumbs.db
.vscode
.python-version
node_modules
npm-debug.log
debug.log
*.log
/tags
/atom-shell/
/out/
docs/output
docs/includes
spec/fixtures/evil-files/
!spec/fixtures/packages/package-with-incompatible-native-module-loaded-conditionally/node_modules/
out/
/electron/

View File

@ -2,7 +2,7 @@
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards

View File

@ -40,18 +40,8 @@ This project and everyone participating in it is governed by the [Atom Code of C
We have an official message board with a detailed FAQ and where the community chimes in with helpful advice if you have questions.
* [Discuss, the official Atom and Electron message board](https://discuss.atom.io)
* [Atom FAQ](https://discuss.atom.io/c/faq)
If chat is more your speed, you can join the Atom and Electron Slack team:
* [Join the Atom and Electron Slack Team](https://atom-slack.herokuapp.com/)
* Even though Slack is a chat service, sometimes it takes several hours for community members to respond — please be patient!
* Use the `#atom` channel for general questions or discussion about Atom
* Use the `#electron` channel for questions about Electron
* Use the `#packages` channel for questions or discussion about writing or contributing to Atom packages (both core and community)
* Use the `#ui` channel for questions and discussion about Atom UI and themes
* There are many other channels available, check the channel list
* [Github Discussions, the official Atom message board](https://github.com/atom/atom/discussions)
* [Atom FAQ](https://flight-manual.atom.io/faq/)
## What should I know before I get started?
@ -82,12 +72,12 @@ Here's a list of the big ones:
* [language-javascript](https://github.com/atom/language-javascript) - all bundled languages are packages too, and each one has a separate package `language-[name]`. Use these for feedback on syntax highlighting issues that only appear for a specific language.
* [one-dark-ui](https://github.com/atom/one-dark-ui) - the default UI styling for anything but the text editor. UI theme packages (i.e. packages with a `-ui` suffix) provide only styling and it's possible that a bundled package is responsible for a UI issue. There are other bundled UI themes, such as [one-light-ui](https://github.com/atom/one-light-ui).
* [one-dark-syntax](https://github.com/atom/one-dark-syntax) - the default syntax highlighting styles applied for all languages. There are other bundled syntax themes, such as [solarized-dark-syntax](https://github.com/atom/solarized-dark-syntax). You should use these packages for reporting issues that appear in many languages, but disappear if you change to another syntax theme.
* [apm](https://github.com/atom/apm) - the `apm` command line tool (Atom Package Manager). You should use this repository for any contributions related to the `apm` tool and to publishing packages.
* [apm](https://github.com/atom/apm) - the `apm` command line tool (Atom Package Manager). You should use this repository for any contributions related to the `apm` tool and for publishing packages.
* [atom.io](https://github.com/atom/atom.io) - the repository for feedback on the [Atom.io website](https://atom.io) and the [Atom.io package API](https://github.com/atom/atom/blob/master/docs/apm-rest-api.md) used by [apm](https://github.com/atom/apm).
There are many more, but this list should be a good starting point. For more information on how to work with Atom's official packages, see [Contributing to Atom Packages][contributing-to-official-atom-packages].
Also, because Atom is so extensible, it's possible that a feature you've become accustomed to in Atom or an issue you're encountering isn't coming from a bundled package at all, but rather a [community package](https://atom.io/packages) you've installed. Each community package has its own repository too, the [Atom FAQ](https://discuss.atom.io/c/faq) has instructions on how to [contact the maintainers of any Atom community package or theme.](https://discuss.atom.io/t/i-have-a-question-about-a-specific-atom-community-package-where-is-the-best-place-to-ask-it/25581)
Also, because Atom is so extensible, it's possible that a feature you've become accustomed to in Atom or an issue you're encountering isn't coming from a bundled package at all, but rather a [community package](https://atom.io/packages) you've installed. Each community package has its own repository too.
#### Package Conventions
@ -105,7 +95,7 @@ There are a few conventions that have developed over time around packages:
### Design Decisions
When we make a significant decision in how we maintain the project and what we can or cannot support, we will document it in the [atom/design-decisions repository](https://github.com/atom/design-decisions). If you have a question around how we do things, check to see if it is documented there. If it is *not* documented there, please open a new topic on [Discuss, the official Atom message board](https://discuss.atom.io) and ask your question.
When we make a significant decision in how we maintain the project and what we can or cannot support, we will document it in the [atom/design-decisions repository](https://github.com/atom/design-decisions). If you have a question around how we do things, check to see if it is documented there. If it is *not* documented there, please open a new topic on [Github Discussions, the official Atom message board](https://github.com/atom/atom/discussions) and ask your question.
## How Can I Contribute?
@ -120,7 +110,7 @@ Before creating bug reports, please check [this list](#before-submitting-a-bug-r
#### Before Submitting A Bug Report
* **Check the [debugging guide](https://flight-manual.atom.io/hacking-atom/sections/debugging/).** You might be able to find the cause of the problem and fix things yourself. Most importantly, check if you can reproduce the problem [in the latest version of Atom](https://flight-manual.atom.io/hacking-atom/sections/debugging/#update-to-the-latest-version), if the problem happens when you run Atom in [safe mode](https://flight-manual.atom.io/hacking-atom/sections/debugging/#check-if-the-problem-shows-up-in-safe-mode), and if you can get the desired behavior by changing [Atom's or packages' config settings](https://flight-manual.atom.io/hacking-atom/sections/debugging/#check-atom-and-package-settings).
* **Check the [FAQs on the forum](https://discuss.atom.io/c/faq)** for a list of common questions and problems.
* **Check the [faq](https://flight-manual.atom.io/faq/) and the [discussions](https://github.com/atom/atom/discussions)** for a list of common questions and problems.
* **Determine [which repository the problem should be reported in](#atom-and-packages)**.
* **Perform a [cursory search](https://github.com/search?q=+is%3Aissue+user%3Aatom)** to see if the problem has already been reported. If it has **and the issue is still open**, add a comment to the existing issue instead of opening a new one.
@ -354,7 +344,7 @@ This section lists the labels we use to help us track and manage issues and pull
[GitHub search](https://help.github.com/articles/searching-issues/) makes it easy to use labels for finding groups of issues or pull requests you're interested in. For example, you might be interested in [open issues across `atom/atom` and all Atom-owned packages which are labeled as bugs, but still need to be reliably reproduced](https://github.com/search?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+user%3Aatom+label%3Abug+label%3Aneeds-reproduction) or perhaps [open pull requests in `atom/atom` which haven't been reviewed yet](https://github.com/search?utf8=%E2%9C%93&q=is%3Aopen+is%3Apr+repo%3Aatom%2Fatom+comments%3A0). To help you find issues and pull requests, each label is listed with search links for finding open items with that label in `atom/atom` only and also across all Atom repositories. We encourage you to read about [other search filters](https://help.github.com/articles/searching-issues/) which will help you write more focused queries.
The labels are loosely grouped by their purpose, but it's not required that every issue have a label from every group or that an issue can't have more than one label from the same group.
The labels are loosely grouped by their purpose, but it's not required that every issue has a label from every group or that an issue can't have more than one label from the same group.
Please open an issue on `atom/atom` if you have suggestions for new labels, and if you notice some labels are missing on some repositories, then please open an issue on that repository.

View File

@ -1,20 +1,31 @@
# VERSION: 0.1
# DESCRIPTION: Image to build Atom and create a .rpm file
# VERSION: 0.2
# DESCRIPTION: Image to build Atom
# Base docker image
FROM nodesource/fedora21:4.2.6
FROM ubuntu:20.04
# Install dependencies
RUN yum install -y \
make \
gcc \
gcc-c++ \
glibc-devel \
git-core \
libsecret-devel \
rpmdevtools
RUN apt-get update && \
DEBIAN_FRONTEND="noninteractive" \
apt-get install -y \
build-essential \
git \
libsecret-1-dev \
fakeroot \
rpm \
libx11-dev \
libxkbfile-dev \
libgdk-pixbuf2.0-dev \
libgtk-3-dev \
libxss-dev \
libasound2-dev \
npm && \
rm -rf /var/lib/apt/lists/*
# Update npm and dependencies
RUN npm install -g npm --loglevel error
ADD . /atom
WORKDIR /atom
# Use python2 by default
RUN npm config set python /usr/bin/python2 -g
ENTRYPOINT ["/usr/bin/env", "sh", "-c"]
CMD ["bash"]

View File

@ -1,4 +1,4 @@
Copyright (c) 2011-2020 GitHub Inc.
Copyright (c) 2011-2021 GitHub Inc.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the

106
README.md
View File

@ -1,86 +1,80 @@
# Atom
[![Build status](https://dev.azure.com/github/Atom/_apis/build/status/Atom%20Production%20Branches?branchName=master)](https://dev.azure.com/github/Atom/_build/latest?definitionId=32&branchName=master)
[![Dependency Status](https://david-dm.org/atom/atom.svg)](https://david-dm.org/atom/atom)
[![Join the Atom Community on Slack](https://atom-slack.herokuapp.com/badge.svg)](https://atom-slack.herokuapp.com)
<div align = center>
Atom is a hackable text editor for the 21st century, built on [Electron](https://github.com/electron/electron), and based on everything we love about our favorite editors. We designed it to be deeply customizable, but still approachable using the default configuration.
![Banner]
![Atom](https://user-images.githubusercontent.com/378023/49132477-f4b77680-f31f-11e8-8357-ac6491761c6c.png)
[![Badge License]][License]
[![Badge Guidelines]][Guidelines]
[![Badge Retired]][Retired]
[![Badge Discord]][Discord]
![Atom Screenshot](https://user-images.githubusercontent.com/378023/49132478-f4b77680-f31f-11e8-9e10-e8454d8d9b7e.png)
<br>
<br>
Visit [atom.io](https://atom.io) to learn more or visit the [Atom forum](https://discuss.atom.io).
# Atom Community
Follow [@AtomEditor](https://twitter.com/atomeditor) on Twitter for important
announcements.
[![Button Install]][Install]
[![Button Documentation]][Documentation]
[![Button Build]][Build]
This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md).
By participating, you are expected to uphold this code. Please report unacceptable behavior to atom@github.com.
<br>
*A hackable text editor for the 21st century, built on **[Electron]**,* <br>
*and based on everything we love about our favorite editors.*
## Documentation
*We designed it to be deeply customizable, but still* <br>
*approachable using the default configuration.*
If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](https://flight-manual.atom.io) is free and available online. You can find the source to the manual in [atom/flight-manual.atom.io](https://github.com/atom/flight-manual.atom.io).
<br>
<br>
The [API reference](https://atom.io/docs/api) for developing packages is also documented on Atom.io.
[![Badge Status]][Status]
## Installing
<br>
<br>
### Prerequisites
- [Git](https://git-scm.com)
![Preview]
### macOS
</div>
Download the latest [Atom release](https://github.com/atom/atom/releases/latest).
Atom will automatically update when a new release is available.
<!---------------------------------------------------------------->
### Windows
[Guidelines]: https://github.com/logos 'Branding Guidelines'
[Electron]: https://github.com/electron/electron
[Discord]: https://discord.gg/2tD9evh8qP 'Join the Atom Community Discord today!'
[Status]: https://dev.azure.com/atomcommunity/atomcommunity/_build/latest?definitionId=10&branchName=master
Download the latest [Atom installer](https://github.com/atom/atom/releases/latest). `AtomSetup.exe` is 32-bit. For 64-bit systems, download `AtomSetup-x64.exe`.
[#]: #
Atom will automatically update when a new release is available.
You can also download `atom-windows.zip` (32-bit) or `atom-x64-windows.zip` (64-bit) from the [releases page](https://github.com/atom/atom/releases/latest).
The `.zip` version will not automatically update.
<!---------------------------{ Files }--------------------------->
Using [Chocolatey](https://chocolatey.org)? Run `cinst Atom` to install the latest version of Atom.
[Documentation]: docs/Documentation.md 'Information how to use & work with Atom.'
[Install]: docs/Installation.md 'How to install Atom on your system.'
[Retired]: docs/Retirement.md 'Check out what happened to the original Atom project.'
[License]: LICENSE.md
[Build]: docs/Building.md 'Instructions on how to build Atom by yourself.'
### Linux
Atom is only available for 64-bit Linux systems.
<!---------------------------{ Images }--------------------------->
Configure your distribution's package manager to install and update Atom by following the [Linux installation instructions](https://flight-manual.atom.io/getting-started/sections/installing-atom/#platform-linux) in the Flight Manual. You will also find instructions on how to install Atom's official Linux packages without using a package repository, though you will not get automatic updates after installing Atom this way.
[Preview]: https://user-images.githubusercontent.com/378023/49132478-f4b77680-f31f-11e8-9e10-e8454d8d9b7e.png 'Preview of the editor.'
[Banner]: https://user-images.githubusercontent.com/378023/49132477-f4b77680-f31f-11e8-8357-ac6491761c6c.png
#### Archive extraction
An archive is available for people who don't want to install `atom` as root.
<!---------------------------{ Badges }--------------------------->
This version enables you to install multiple Atom versions in parallel. It has been built on Ubuntu 64-bit,
but should be compatible with other Linux distributions.
[Badge Guidelines]: https://img.shields.io/badge/Logo-Guidelines-d36e2d.svg?style=for-the-badge&labelColor=323232
[Badge Retired]: https://img.shields.io/badge/Retired-bb3c1f.svg?style=for-the-badge&labelColor=323232&logoColor=white&logo=Atom
[Badge Discord]: https://img.shields.io/badge/Discord-6399c4.svg?style=for-the-badge&labelColor=323232&logoColor=white&logo=Discord
[Badge License]: https://img.shields.io/badge/License-MIT-e5ab42.svg?style=for-the-badge&labelColor=323232
[Badge Status]: https://dev.azure.com/atomcommunity/atomcommunity/_apis/build/status/atom-community/Release%20Branch%20Build?branchName=master
1. Install dependencies (on Ubuntu): `sudo apt install git gconf2 gconf-service libgtk2.0-0 libudev1 libgcrypt20 libnotify4 libxtst6 libnss3 python3 gvfs-bin xdg-utils libcap2`
1. (If the `python3` package isn't available, or is too old (Python 3 should be >= 3.5), either `python2` or `python` (2.6 or 2.7) will work in its place.)
2. Download `atom-amd64.tar.gz` from the [Atom releases page](https://github.com/atom/atom/releases/latest).
3. Run `tar xf atom-amd64.tar.gz` in the directory where you want to extract the Atom folder.
4. Launch Atom using the installed `atom` command from the newly extracted directory.
The Linux version does not currently automatically update so you will need to
repeat these steps to upgrade to future releases.
<!--------------------------{ Buttons }--------------------------->
## Building
[Button Documentation]: https://img.shields.io/badge/Documentation-6399c4?style=for-the-badge&logoColor=white&logo=GitBook
[Button Install]: https://img.shields.io/badge/Install-78af9f?style=for-the-badge&logoColor=white&logo=DocuSign
[Button Build]: https://img.shields.io/badge/Building-e5ab42?style=for-the-badge&logoColor=white&logo=GNUBash
* [Linux](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/#platform-linux)
* [macOS](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/#platform-mac)
* [Windows](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/#platform-windows)
## Discussion
* Discuss Atom on our [forums](https://discuss.atom.io/)
* Chat about Atom on our Slack team -- [instructions for joining](https://discuss.atom.io/t/join-us-on-slack/16638?source_topic_id=25406)
## License
[MIT](https://github.com/atom/atom/blob/master/LICENSE.md)
When using the Atom or other GitHub logos, be sure to follow the [GitHub logo guidelines](https://github.com/logos).

View File

@ -4,8 +4,6 @@ If you're looking for support for Atom there are a lot of options, check out:
* User Documentation &mdash; [The Atom Flight Manual](https://flight-manual.atom.io)
* Developer Documentation &mdash; [Atom API Documentation](https://atom.io/docs/api/latest)
* FAQ &mdash; [The Atom FAQ on Discuss](https://discuss.atom.io/c/faq)
* Message Board &mdash; [Discuss, the official Atom and Electron message board](https://discuss.atom.io)
* Chat &mdash; [Join the Atom Slack team](https://atom-slack.herokuapp.com/)
* Message Board &mdash; [Github Discussions, the official Atom message board](https://github.com/atom/atom/discussions)
On Discuss and in the Atom Slack team, there are a bunch of helpful community members that should be willing to point you in the right direction.
On Atoms Github Discussions board, there are a bunch of helpful community members that should be willing to point you in the right direction.

253
apm/package-lock.json generated
View File

@ -4,36 +4,36 @@
"lockfileVersion": 1,
"dependencies": {
"atom-package-manager": {
"version": "npm:@atom-ide-community/atom-package-manager@2.5.2-atomic.3.1",
"resolved": "https://registry.npmjs.org/@atom-ide-community/atom-package-manager/-/atom-package-manager-2.5.2-atomic.3.1.tgz",
"integrity": "sha512-vXMQNf7Fyeb/v18m7615zPgupefs0KAY+YxseqYdV+DYrELj+HpuSzW9G5vpQVCYtX3tS+/713VGZMlxbyMgfw==",
"version": "npm:@atom-ide-community/atom-package-manager@2.6.5-atomic.1.0",
"resolved": "https://registry.npmjs.org/@atom-ide-community/atom-package-manager/-/atom-package-manager-2.6.5-atomic.1.0.tgz",
"integrity": "sha512-6plCUJpj90T4JhLtrADS2v8oi8HxQSFa7f82VWg4I40Os43La8Gsd/gMgAmIxgeBkbt3qXlI6cZvpDiDxQmlmg==",
"requires": {
"@atom/plist": "0.4.4",
"asar-require": "0.3.0",
"async": "~0.9.2",
"async": "^3.2.0",
"colors": "~1.4.0",
"first-mate": "^7.4.1",
"first-mate": "^7.4.3",
"fs-plus": "3.x",
"git-utils": "^5.6.2",
"git-utils": "^5.7.2",
"glob": "^7.1.6",
"hosted-git-info": "^3.0.5",
"keytar": "^6.0.1",
"hosted-git-info": "^3.0.7",
"keytar": "^7.7.0",
"mv": "2.1.1",
"ncp": "~2.0.0",
"npm": "^6.14.8",
"open": "7.2.1",
"npm": "^6.14.9",
"open": "7.3.0",
"q": "~1.5.1",
"read": "~1.0.5",
"read": "~1.0.7",
"request": "^2.88.2",
"rimraf": "^3.0.2",
"season": "^6.0.2",
"semver": "^7.3.2",
"semver": "^7.3.4",
"tar": "^6.0.5",
"temp": "^0.9.1",
"temp": "^0.9.4",
"underscore-plus": "1.x",
"wordwrap": "1.0.0",
"wrench": "~1.5.1",
"yargs": "^3.23.0"
"yargs": "^3.32.0"
},
"dependencies": {
"@atom/plist": {
@ -72,9 +72,9 @@
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
},
"are-we-there-yet": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
"integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
"integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
"requires": {
"delegates": "^1.0.0",
"readable-stream": "^2.0.6"
@ -165,9 +165,9 @@
"integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"async": {
"version": "0.9.2",
"resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
"integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz",
"integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg=="
},
"asynckit": {
"version": "0.4.0",
@ -185,9 +185,9 @@
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"base64-js": {
"version": "1.5.1",
@ -212,9 +212,9 @@
}
},
"bl": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.0.3.tgz",
"integrity": "sha512-fs4G6/Hu4/EE+F75J8DuN/0IpQqNjAdC7aEQv7Qt8MHGUH7Ckv2MwTEEeN9QehD0pfIDkMI1bkHYkKy7xHyKIg==",
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
"integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"requires": {
"buffer": "^5.5.0",
"inherits": "^2.0.4",
@ -388,9 +388,9 @@
}
},
"decompress-zip": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.2.tgz",
"integrity": "sha512-Ab1QY4LrWMrUuo53lLnmGOby7v8ryqxJ+bKibKSiPisx+25mhut1dScVBXAYx14i/PqSrFZvR2FRRazhLbvL+g==",
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.3.tgz",
"integrity": "sha512-/fy1L4s+4jujqj3kNptWjilFw3E6De8U6XUFvqmh4npN3Vsypm3oT2V0bXcmbBWS+5j5tr4okYaFrOmyZkszEg==",
"requires": {
"binary": "^0.3.0",
"graceful-fs": "^4.1.3",
@ -538,9 +538,9 @@
},
"dependencies": {
"type": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz",
"integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA=="
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz",
"integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw=="
}
}
},
@ -565,15 +565,15 @@
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"first-mate": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/first-mate/-/first-mate-7.4.1.tgz",
"integrity": "sha512-SEG5W0aajCvK/Ngoo3he3Ib4DsT+CRPhBAgSju5hksBLvvUfRWP7Jf3+HQ+CNTD4GZZqbDNOEJNOxbf35EblrQ==",
"version": "7.4.3",
"resolved": "https://registry.npmjs.org/first-mate/-/first-mate-7.4.3.tgz",
"integrity": "sha512-PtZUpaPmcV5KV4Rw5TfwczEnExN+X1o3Q/G82E4iRJ0tW91fm3Yi7pa5t4cBH8r3D6EyoBKvfpG2jKE+TZ0/nw==",
"requires": {
"emissary": "^1",
"event-kit": "^2.2.0",
"fs-plus": "^3.0.0",
"grim": "^2.0.1",
"oniguruma": "7.2.1",
"oniguruma": "^7.2.3",
"season": "^6.0.2",
"underscore-plus": "^1"
}
@ -683,12 +683,12 @@
}
},
"git-utils": {
"version": "5.6.2",
"resolved": "https://registry.npmjs.org/git-utils/-/git-utils-5.6.2.tgz",
"integrity": "sha512-3pen//xGs5ZJiXejUbx79FyRR58J6DgI7tL9Mc7YQeuF5ENXf/7k0K2M8h4JBlTKZcxxCr8MGA1Xcg4O4l/YjA==",
"version": "5.7.3",
"resolved": "https://registry.npmjs.org/git-utils/-/git-utils-5.7.3.tgz",
"integrity": "sha512-in1hjFfmzY86gKBt+YMTaVyCGtX2WTnN0uPj37bI5HsrnU2oj8OFcWOEzOI5PxQXPMxFxtvRebOHAOGB8M125w==",
"requires": {
"fs-plus": "^3.0.0",
"nan": "^2.14.0"
"nan": "^2.14.2"
}
},
"github-from-package": {
@ -697,9 +697,9 @@
"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4="
},
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
"integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@ -710,9 +710,9 @@
}
},
"graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
},
"grim": {
"version": "2.0.3",
@ -742,9 +742,9 @@
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
},
"hosted-git-info": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.7.tgz",
"integrity": "sha512-fWqc0IcuXs+BmE9orLDyVykAG9GJtGLGuZAAqgcckPgv5xad4AcXGIv8galtQvlwutxSlaMcdw7BUtq2EIvqCQ==",
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz",
"integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==",
"requires": {
"lru-cache": "^6.0.0"
}
@ -779,9 +779,9 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
},
"invert-kv": {
"version": "1.0.0",
@ -789,9 +789,9 @@
"integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
},
"is-docker": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
"integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw=="
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
"integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ=="
},
"is-fullwidth-code-point": {
"version": "1.0.0",
@ -864,12 +864,12 @@
}
},
"keytar": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/keytar/-/keytar-6.0.1.tgz",
"integrity": "sha512-1Ihpf2tdM3sLwGMkYHXYhVC/hx5BDR7CWFL4IrBA3IDZo0xHhS2nM+tU9Y+u/U7okNfbVkwmKsieLkcWRMh93g==",
"version": "7.7.0",
"resolved": "https://registry.npmjs.org/keytar/-/keytar-7.7.0.tgz",
"integrity": "sha512-YEY9HWqThQc5q5xbXbRwsZTh2PJ36OSYRjSv3NN2xf5s5dpLTjEZnC2YikR29OaVybf9nQ0dJ/80i40RS97t/A==",
"requires": {
"node-addon-api": "^3.0.0",
"prebuild-install": "5.3.4"
"prebuild-install": "^6.0.0"
}
},
"klaw": {
@ -897,16 +897,16 @@
}
},
"mime-db": {
"version": "1.44.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
"integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
"version": "1.49.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
"integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA=="
},
"mime-types": {
"version": "2.1.27",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
"integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
"version": "2.1.32",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
"integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
"requires": {
"mime-db": "1.44.0"
"mime-db": "1.49.0"
}
},
"mimic-response": {
@ -1015,9 +1015,9 @@
}
},
"nan": {
"version": "2.14.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
"integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
"version": "2.15.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
"integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ=="
},
"napi-build-utils": {
"version": "1.0.2",
@ -1035,9 +1035,9 @@
"integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw="
},
"node-abi": {
"version": "2.19.3",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.19.3.tgz",
"integrity": "sha512-9xZrlyfvKhWme2EXFKQhZRp1yNWT/uI1luYPr3sFl+H4keYY4xR+1jO7mvTTijIsHf1M+QDe9uWuKeEpLInIlg==",
"version": "2.30.0",
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.0.tgz",
"integrity": "sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==",
"requires": {
"semver": "^5.4.1"
},
@ -1050,14 +1050,9 @@
}
},
"node-addon-api": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.0.2.tgz",
"integrity": "sha512-+D4s2HCnxPd5PjjI0STKwncjXTUKKqm74MDMz9OPXavjsGmjkvwgLtA5yoxJUdmpj52+2u+RrXgPipahKczMKg=="
},
"noop-logger": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
"integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI="
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz",
"integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A=="
},
"nopt": {
"version": "3.0.6",
@ -1068,9 +1063,9 @@
}
},
"npm": {
"version": "6.14.9",
"resolved": "https://registry.npmjs.org/npm/-/npm-6.14.9.tgz",
"integrity": "sha512-yHi1+i9LyAZF1gAmgyYtVk+HdABlLy94PMIDoK1TRKWvmFQAt5z3bodqVwKvzY0s6dLqQPVsRLiwhJfNtiHeCg==",
"version": "6.14.14",
"resolved": "https://registry.npmjs.org/npm/-/npm-6.14.14.tgz",
"integrity": "sha512-4TnYPV3rvwk9m92ON0iFrdXtRyMhrNkGdI8sr3dy1HVE3pVNxR9FyWYbjAw/HjfmHvmHUbxTVbmjAMv8NhIa6Q==",
"requires": {
"JSONStream": "^1.3.5",
"abbrev": "~1.1.1",
@ -1103,13 +1098,13 @@
"glob": "^7.1.6",
"graceful-fs": "^4.2.4",
"has-unicode": "~2.0.1",
"hosted-git-info": "^2.8.8",
"hosted-git-info": "^2.8.9",
"iferr": "^1.0.2",
"imurmurhash": "*",
"infer-owner": "^1.0.4",
"inflight": "~1.0.6",
"inherits": "^2.0.4",
"ini": "^1.3.5",
"ini": "^1.3.8",
"init-package-json": "^1.10.3",
"is-cidr": "^3.0.0",
"json-parse-better-errors": "^1.0.2",
@ -1155,7 +1150,7 @@
"npm-user-validate": "^1.0.1",
"npmlog": "~4.1.2",
"once": "~1.4.0",
"opener": "^1.5.1",
"opener": "^1.5.2",
"osenv": "^0.1.5",
"pacote": "^9.5.12",
"path-is-inside": "~1.0.2",
@ -1179,9 +1174,9 @@
"slide": "~1.1.6",
"sorted-object": "~2.0.1",
"sorted-union-stream": "~2.1.3",
"ssri": "^6.0.1",
"ssri": "^6.0.2",
"stringify-package": "^1.0.1",
"tar": "^4.4.13",
"tar": "^4.4.15",
"text-table": "~0.2.0",
"tiny-relative-date": "^1.3.0",
"uid-number": "0.0.6",
@ -2227,7 +2222,7 @@
"bundled": true
},
"hosted-git-info": {
"version": "2.8.8",
"version": "2.8.9",
"bundled": true
},
"http-cache-semantics": {
@ -2309,7 +2304,7 @@
"bundled": true
},
"ini": {
"version": "1.3.5",
"version": "1.3.8",
"bundled": true
},
"init-package-json": {
@ -3062,7 +3057,7 @@
}
},
"opener": {
"version": "1.5.1",
"version": "1.5.2",
"bundled": true
},
"os-homedir": {
@ -3623,7 +3618,7 @@
}
},
"ssri": {
"version": "6.0.1",
"version": "6.0.2",
"bundled": true,
"requires": {
"figgy-pudding": "^3.5.1"
@ -3740,7 +3735,7 @@
}
},
"tar": {
"version": "4.4.13",
"version": "4.4.15",
"bundled": true,
"requires": {
"chownr": "^1.1.1",
@ -4062,7 +4057,7 @@
"bundled": true
},
"y18n": {
"version": "4.0.0",
"version": "4.0.1",
"bundled": true
},
"yallist": {
@ -4196,17 +4191,17 @@
}
},
"oniguruma": {
"version": "7.2.1",
"resolved": "https://registry.npmjs.org/oniguruma/-/oniguruma-7.2.1.tgz",
"integrity": "sha512-WPS/e1uzhswPtJSe+Zls/kAj27+lEqZjCmRSjnYk/Z4L2Mu+lJC2JWtkZhPJe4kZeTQfz7ClcLyXlI4J68MG2w==",
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/oniguruma/-/oniguruma-7.2.3.tgz",
"integrity": "sha512-PZZcE0yfg8Q1IvaJImh21RUTHl8ep0zwwyoE912KqlWVrsGByjjj29sdACcD1BFyX2bLkfuOJeP+POzAGVWtbA==",
"requires": {
"nan": "^2.14.0"
}
},
"open": {
"version": "7.2.1",
"resolved": "https://registry.npmjs.org/open/-/open-7.2.1.tgz",
"integrity": "sha512-xbYCJib4spUdmcs0g/2mK1nKo/jO2T7INClWd/beL7PFkXRWgr8B23ssDHX/USPn2M2IjDR5UdpYs6I67SnTSA==",
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz",
"integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==",
"requires": {
"is-docker": "^2.0.0",
"is-wsl": "^2.1.1"
@ -4236,25 +4231,23 @@
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"prebuild-install": {
"version": "5.3.4",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.4.tgz",
"integrity": "sha512-AkKN+pf4fSEihjapLEEj8n85YIw/tN6BQqkhzbDc0RvEZGdkpJBGMUYx66AAMcPG2KzmPQS7Cm16an4HVBRRMA==",
"version": "6.1.4",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz",
"integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==",
"requires": {
"detect-libc": "^1.0.3",
"expand-template": "^2.0.3",
"github-from-package": "0.0.0",
"minimist": "^1.2.3",
"mkdirp": "^0.5.1",
"mkdirp-classic": "^0.5.3",
"napi-build-utils": "^1.0.1",
"node-abi": "^2.7.0",
"noop-logger": "^0.1.1",
"node-abi": "^2.21.0",
"npmlog": "^4.0.1",
"pump": "^3.0.0",
"rc": "^1.2.7",
"simple-get": "^3.0.3",
"tar-fs": "^2.0.0",
"tunnel-agent": "^0.6.0",
"which-pm-runs": "^1.0.0"
"tunnel-agent": "^0.6.0"
}
},
"process-nextick-args": {
@ -4386,9 +4379,12 @@
}
},
"semver": {
"version": "7.3.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
"integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ=="
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
"requires": {
"lru-cache": "^6.0.0"
}
},
"set-blocking": {
"version": "2.0.0",
@ -4460,9 +4456,9 @@
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
},
"tar": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz",
"integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==",
"version": "6.1.8",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.1.8.tgz",
"integrity": "sha512-sb9b0cp855NbkMJcskdSYA7b11Q8JsX4qe4pyUAfHp+Y6jBjJeek2ZVlwEfWayshEIwlIzXx0Fain3QG9JPm2A==",
"requires": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
@ -4496,9 +4492,9 @@
}
},
"tar-stream": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.4.tgz",
"integrity": "sha512-o3pS2zlG4gxr67GmFYBLlq+dM8gyRGUOvsrHclSkvtVtQbjV0s/+ZE8OpICbaj8clrX3tjeHngYGP7rweaBnuw==",
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
"requires": {
"bl": "^4.0.3",
"end-of-stream": "^1.4.1",
@ -4605,9 +4601,9 @@
"integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg=="
},
"underscore": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.0.tgz",
"integrity": "sha512-21rQzss/XPMjolTiIezSu3JAjgagXKROtNrYFEOWK109qY1Uv2tVjPTZ1ci2HgvQDA16gHYSthQIJfB+XId/rQ=="
"version": "1.13.1",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
"integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
},
"underscore-plus": {
"version": "1.7.0",
@ -4618,9 +4614,9 @@
}
},
"uri-js": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
"integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"requires": {
"punycode": "^2.1.0"
}
@ -4645,11 +4641,6 @@
"extsprintf": "^1.2.0"
}
},
"which-pm-runs": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz",
"integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs="
},
"wide-align": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
@ -4698,9 +4689,9 @@
"integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ=="
},
"y18n": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
"integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
"integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ=="
},
"yallist": {
"version": "4.0.0",

View File

@ -6,6 +6,6 @@
"url": "https://github.com/atom/atom.git"
},
"dependencies": {
"atom-package-manager": "npm:@atom-ide-community/atom-package-manager@2.5.2-atomic.3.1"
"atom-package-manager": "npm:@atom-ide-community/atom-package-manager@2.6.5-atomic.1.0"
}
}

View File

@ -168,6 +168,11 @@ elif [ $OS == 'Linux' ]; then
;;
esac
#Will allow user to get context menu on cinnamon desktop enviroment
if [[ "$(expr substr $(printenv | grep "DESKTOP_SESSION=") 17 8)" == "cinnamon" ]]; then
cp "resources/linux/desktopenviroment/cinnamon/atom.nemo_action" "/usr/share/nemo/actions/atom.nemo_action"
fi
: ${TMPDIR:=/tmp}
[ -x "$ATOM_PATH" ] || ATOM_PATH="$TMPDIR/atom-build/Atom/atom"

6
docs/Building.md Normal file
View File

@ -0,0 +1,6 @@
## Building
* [Linux](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/#platform-linux)
* [macOS](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/#platform-mac)
* [Windows](https://flight-manual.atom.io/hacking-atom/sections/hacking-on-atom-core/#platform-windows)

10
docs/Documentation.md Normal file
View File

@ -0,0 +1,10 @@
## Documentation
Visit [atom.io](https://atom.io) to learn more or visit the [Atom forum](https://github.com/atom/atom/discussions).
Follow [@AtomEditor](https://twitter.com/atomeditor) on Twitter for important
announcements.
If you want to read about using Atom or developing packages in Atom, the [Atom Flight Manual](https://flight-manual.atom.io) is free and available online. You can find the source to the manual in [atom/flight-manual.atom.io](https://github.com/atom/flight-manual.atom.io).
The [API reference](https://atom.io/docs/api) for developing packages is also documented on Atom.io.

45
docs/Installation.md Normal file
View File

@ -0,0 +1,45 @@
## Installing
<!-- ### Prerequisites
- [Git](https://git-scm.com)
### macOS
Download the latest [Atom release](https://github.com/atom/atom/releases/latest).
Atom will automatically update when a new release is available.
### Windows
Download the latest [Atom installer](https://github.com/atom/atom/releases/latest). `AtomSetup.exe` is 32-bit. For 64-bit systems, download `AtomSetup-x64.exe`.
Atom will automatically update when a new release is available.
You can also download `atom-windows.zip` (32-bit) or `atom-x64-windows.zip` (64-bit) from the [releases page](https://github.com/atom/atom/releases/latest).
The `.zip` version will not automatically update.
Using [Chocolatey](https://chocolatey.org)? Run `cinst Atom` to install the latest version of Atom.
### Linux
Atom is only available for 64-bit Linux systems.
Configure your distribution's package manager to install and update Atom by following the [Linux installation instructions](https://flight-manual.atom.io/getting-started/sections/installing-atom/#platform-linux) in the Flight Manual. You will also find instructions on how to install Atom's official Linux packages without using a package repository, though you will not get automatic updates after installing Atom this way.
#### Archive extraction
An archive is available for people who don't want to install `atom` as root.
This version enables you to install multiple Atom versions in parallel. It has been built on Ubuntu 64-bit,
but should be compatible with other Linux distributions.
1. Install dependencies (on Ubuntu):
```sh
sudo apt install git libasound2 libcurl4 libgbm1 libgcrypt20 libgtk-3-0 libnotify4 libnss3 libglib2.0-bin xdg-utils libx11-xcb1 libxcb-dri3-0 libxss1 libxtst6 libxkbfile1
```
2. Download `atom-amd64.tar.gz` from the [Atom releases page](https://github.com/atom/atom/releases/latest).
3. Run `tar xf atom-amd64.tar.gz` in the directory where you want to extract the Atom folder.
4. Launch Atom using the installed `atom` command from the newly extracted directory.
The Linux version does not currently automatically update so you will need to
repeat these steps to upgrade to future releases. -->
Currently, to get binaries based on code by the Atom community, binaries can be downloaded from the [Azure Pipeline](https://dev.azure.com/atomcommunity/atomcommunity/_build/latest?definitionId=10&branchName=master). From this pipeline, the latest run can be selected. From there, the `8 published` link should be selected to download the files.

13
docs/Retirement.md Normal file
View File

@ -0,0 +1,13 @@
## Retirement Of The Atom Project
Due to changes in the upstream, the original Atom and <br>
its repositories will be archived on `December 15, 2022`.
If you'd like to learn more about the official Atom archiving, <br>
you can read about it in their **[Official Announcement]**.
<!----------------------------------------------------------------------------->
[Official Announcement]: https://github.blog/2022-06-08-sunsetting-atom/

View File

@ -1,117 +1,145 @@
# Atom build status
| System | Azure Pipelines | Travis | AppVeyor/Win | Dependencies |
> **Note**: Since Atom's electron version is outdated, the electron badges are from old versions.
| System | Azure Pipelines | CircleCI | AppVeyor/Win | Dependencies |
|--------|--------|--------------|------------|--------------|
| [Atom](https://github.com/atom/atom) | [![Build status](https://github.visualstudio.com/Atom/_apis/build/status/Atom%20Production%20Branches?branch=master)](https://github.visualstudio.com/Atom/_build/latest?definitionId=32&branch=master) | | | [![Dependency Status](https://david-dm.org/atom/atom.svg)](https://david-dm.org/atom/atom) |
| [APM](https://github.com/atom/apm) | | [![Travis Build Status](https://travis-ci.org/atom/apm.svg?branch=master)](https://travis-ci.org/atom/apm) | [![AppVeyor/Wi Build Status](https://ci.appveyor.com/api/projects/status/j6ixw374a397ugkb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/apm/branch/master) | [![Dependency Status](https://david-dm.org/atom/apm.svg)](https://david-dm.org/atom/apm) |
| [Electron](https://github.com/electron/electron) | | [![Travis Build Status](https://travis-ci.org/electron/electron.svg?branch=master)](https://travis-ci.org/electron/electron) | [![AppVeyor/Wi Build Status](https://ci.appveyor.com/api/projects/status/kvxe4byi7jcxbe26/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/electron) | [![Dependency Status](https://david-dm.org/electron/electron/dev-status.svg)](https://david-dm.org/electron/electron)
| [APM](https://github.com/atom/apm) | [![Build status](https://dev.azure.com/github/Atom/_apis/build/status/Atom%20Production%20Branches?branchName=master)](https://dev.azure.com/github/Atom/_build/latest?definitionId=32&branchName=master) | |
| [Electron](https://github.com/electron/electron) | | [![CircleCI Build Status](https://circleci.com/gh/electron/electron/tree/master.svg?style=shield)](https://circleci.com/gh/electron/electron/tree/master) | [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/4lggi9dpjc1qob7k/branch/master?svg=true)](https://ci.appveyor.com/project/electron-bot/electron-ljo26/branch/master) | [![Dependency Status](https://david-dm.org/electron/electron/dev-status.svg)](https://david-dm.org/electron/electron)
> **Note**: Some repositories have been merged with Atom.
> See <https://github.com/atom/atom/blob/master/packages/README.md> for details.
>
> Here are the packages, libraries, tools, and languages tested along with Atom, and so have no testing badges:
>
> - [about](https://github.com/atom/atom/tree/master/packages/about)
> - [autoflow](https://github.com/atom/atom/tree/master/packages/autoflow)
> - [deprecation-cop](https://github.com/atom/atom/tree/master/packages/deprecation-cop)
> - [dev-live-reload](https://github.com/atom/atom/tree/master/packages/dev-live-reload)
> - [exception-reporting](https://github.com/atom/atom/tree/master/packages/exception-reporting)
> - [git-diff](https://github.com/atom/atom/tree/master/packages/git-diff)
> - [go-to-line](https://github.com/atom/atom/tree/master/packages/go-to-line)
> - [grammar-selector](https://github.com/atom/atom/tree/master/packages/grammar-selector)
> - [line-ending-selector](https://github.com/atom/atom/tree/master/packages/line-ending-selector)
> - [link](https://github.com/atom/atom/tree/master/packages/link)
> - [ruby-on-rails](https://github.com/atom/atom/tree/master/packages/ruby-on-rails)
> - [update-package-dependencies](https://github.com/atom/atom/tree/master/packages/update-package-dependencies)
> - [welcome](https://github.com/atom/atom/tree/master/packages/welcome)
>
> The dependency badges might be irrelevant, so take them with a grain of salt (e.g. not very seriously).
## Packages
| Package | Travis | AppVeyor/Win | Dependencies |
|---------|--------|--------------|--------------|
| [About](https://github.com/atom/about) | [![macOS Build Status](https://travis-ci.org/atom/about.svg?branch=master)](https://travis-ci.org/atom/about) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/msprea3vq47l8oce/branch/master?svg=true)](https://ci.appveyor.com/project/atom/about/branch/master) | [![Dependency Status](https://david-dm.org/atom/about.svg)](https://david-dm.org/atom/about) |
| [Archive View](https://github.com/atom/archive-view) | [![macOS Build Status](https://travis-ci.org/atom/archive-view.svg?branch=master)](https://travis-ci.org/atom/archive-view) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/u3qfgaod4lhriqlj/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/archive-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/archive-view.svg)](https://david-dm.org/atom/archive-view) |
| [AutoComplete Atom API](https://github.com/atom/autocomplete-atom-api) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-atom-api.svg?branch=master)](https://travis-ci.org/atom/autocomplete-atom-api) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1x3uqd9ddchpe555/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-atom-api/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-atom-api.svg)](https://david-dm.org/atom/autocomplete-atom-api) |
| [AutoComplete CSS](https://github.com/atom/autocomplete-css) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-css.svg?branch=master)](https://travis-ci.org/atom/autocomplete-css) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/k3e5uvpmpc5bkja9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-css/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-css.svg)](https://david-dm.org/atom/autocomplete-css) |
| [AutoComplete HTML](https://github.com/atom/autocomplete-html) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-html.svg?branch=master)](https://travis-ci.org/atom/autocomplete-html) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/bsaqbg1fljpd9q1b/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-html/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-html.svg)](https://david-dm.org/atom/autocomplete-html) |
| [AutoComplete+](https://github.com/atom/autocomplete-plus) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-plus.svg?branch=master)](https://travis-ci.org/atom/autocomplete-plus) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/9bpokrud2apgqsq0/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-plus.svg)](https://david-dm.org/atom/autocomplete-plus) |
| [AutoComplete Snippets](https://github.com/atom/autocomplete-snippets) | [![macOS Build Status](https://travis-ci.org/atom/autocomplete-snippets.svg)](https://travis-ci.org/atom/autocomplete-snippets) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/72kfi83l6cw90joy/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autocomplete-snippets/branch/master) | [![Dependency Status](https://david-dm.org/atom/autocomplete-snippets.svg)](https://david-dm.org/atom/autocomplete-snippets) |
| [AutoFlow](https://github.com/atom/autoflow) | [![macOS Build Status](https://travis-ci.org/atom/autoflow.svg?branch=master)](https://travis-ci.org/atom/autoflow) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/kpmsnkbooa29x907/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autoflow/branch/master) | [![Dependency Status](https://david-dm.org/atom/autoflow.svg)](https://david-dm.org/atom/autoflow) |
| [AutoSave](https://github.com/atom/autosave) | [![macOS Build Status](https://travis-ci.org/atom/autosave.svg?branch=master)](https://travis-ci.org/atom/autosave) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/3aktr9updp722fqx/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/autosave/branch/master) | [![Dependency Status](https://david-dm.org/atom/autosave.svg)](https://david-dm.org/atom/autosave) |
| [Background Tips](https://github.com/atom/background-tips) | [![macOS Build Status](https://travis-ci.org/atom/background-tips.svg?branch=master)](https://travis-ci.org/atom/background-tips) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/2utcugietl5vjc7w/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/background-tips/branch/master) | [![Dependency Status](https://david-dm.org/atom/background-tips.svg)](https://david-dm.org/atom/background-tips) |
| [Bookmarks](https://github.com/atom/bookmarks) | [![macOS Build Status](https://travis-ci.org/atom/bookmarks.svg?branch=master)](https://travis-ci.org/atom/bookmarks) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/vjsf78pj4rw6ibcw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/bookmarks/branch/master) | [![Dependency Status](https://david-dm.org/atom/bookmarks.svg)](https://david-dm.org/atom/bookmarks) |
| [Bracket Matcher](https://github.com/atom/bracket-matcher) | [![macOS Build Status](https://travis-ci.org/atom/bracket-matcher.svg?branch=master)](https://travis-ci.org/atom/bracket-matcher) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/rrsl2h7e0od26k54/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/bracket-matcher/branch/master) | [![Dependency Status](https://david-dm.org/atom/bracket-matcher.svg)](https://david-dm.org/atom/bracket-matcher) |
| [Command Palette](https://github.com/atom/command-palette) | [![macOS Build Status](https://travis-ci.org/atom/command-palette.svg?branch=master)](https://travis-ci.org/atom/command-palette) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/jqgwetayr0enorun/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/command-palette/branch/master) | [![Dependency Status](https://david-dm.org/atom/command-palette.svg)](https://david-dm.org/atom/command-palette) |
| [Deprecation Cop](https://github.com/atom/deprecation-cop) | [![macOS Build Status](https://travis-ci.org/atom/deprecation-cop.svg?branch=master)](https://travis-ci.org/atom/deprecation-cop) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/0s870q5fj3vwihjx/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/deprecation-cop/branch/master) | [![Dependency Status](https://david-dm.org/atom/deprecation-cop.svg)](https://david-dm.org/atom/deprecation-cop) |
| [Dev Live Reload](https://github.com/atom/dev-live-reload) | [![macOS Build Status](https://travis-ci.org/atom/dev-live-reload.svg?branch=master)](https://travis-ci.org/atom/dev-live-reload) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/g3sd27ylba1fun1v/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/dev-live-reload/branch/master) | [![Dependency Status](https://david-dm.org/atom/dev-live-reload.svg)](https://david-dm.org/atom/dev-live-reload) |
| [Encoding Selector](https://github.com/atom/encoding-selector) | [![macOS Build Status](https://travis-ci.org/atom/encoding-selector.svg?branch=master)](https://travis-ci.org/atom/encoding-selector) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/e08x6k2b68wpwxxc/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/encoding-selector/branch/master) | [![Dependency Status](https://david-dm.org/atom/encoding-selector.svg)](https://david-dm.org/atom/encoding-selector) |
| [Exception Reporting](https://github.com/atom/exception-reporting) | [![macOS Build Status](https://travis-ci.org/atom/exception-reporting.svg?branch=master)](https://travis-ci.org/atom/exception-reporting) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i0pla7qbpv7celg2/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/exception-reporting/branch/master) | [![Dependency Status](https://david-dm.org/atom/exception-reporting.svg)](https://david-dm.org/atom/exception-reporting) |
| [Find and Replace](https://github.com/atom/find-and-replace) | [![macOS Build Status](https://travis-ci.org/atom/find-and-replace.svg?branch=master)](https://travis-ci.org/atom/find-and-replace) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/6w4baiiq5mw4nxky/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/find-and-replace/branch/master) | [![Dependency Status](https://david-dm.org/atom/find-and-replace.svg)](https://david-dm.org/atom/find-and-replace) |
| [Fuzzy Finder](https://github.com/atom/fuzzy-finder) | [![macOS Build Status](https://travis-ci.org/atom/fuzzy-finder.svg?branch=master)](https://travis-ci.org/atom/fuzzy-finder) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/b4b2dg5n9r1wdqad/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fuzzy-finder/branch/master) | [![Dependency Status](https://david-dm.org/atom/fuzzy-finder.svg)](https://david-dm.org/atom/fuzzy-finder) |
| [GitHub](https://github.com/atom/github) | [![macOS Build Status](https://travis-ci.com/atom/github.svg?token=RwrCnzpsZN5oEq5S5p7V&branch=master)](https://travis-ci.com/atom/github) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/psctk8vrva49dseb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/github/branch/master) | [![Dependency Status](https://david-dm.org/atom/github.svg)](https://david-dm.org/atom/github) |
| [Git Diff](https://github.com/atom/git-diff) | [![macOS Build Status](https://travis-ci.org/atom/git-diff.svg?branch=master)](https://travis-ci.org/atom/git-diff) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/9auj52cs0vso66nv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/git-diff/branch/master) | [![Dependency Status](https://david-dm.org/atom/git-diff.svg)](https://david-dm.org/atom/git-diff) |
| [Go to Line](https://github.com/atom/go-to-line) | [![macOS Build Status](https://travis-ci.org/atom/go-to-line.svg?branch=master)](https://travis-ci.org/atom/go-to-line) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/qf0isc8ulw4wxi0b/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/go-to-line/branch/master) | [![Dependency Status](https://david-dm.org/atom/go-to-line.svg)](https://david-dm.org/atom/go-to-line) |
| [Grammar Selector](https://github.com/atom/grammar-selector) | [![macOS Build Status](https://travis-ci.org/atom/grammar-selector.svg?branch=master)](https://travis-ci.org/atom/grammar-selector) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/pg8qss03bfh4ngqm/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grammar-selector/branch/master) | [![Dependency Status](https://david-dm.org/atom/grammar-selector.svg)](https://david-dm.org/atom/grammar-selector) |
| [Image View](https://github.com/atom/image-view) | [![macOS Build Status](https://travis-ci.org/atom/image-view.svg?branch=master)](https://travis-ci.org/atom/image-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/notavaawrswk0g10/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/image-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/image-view.svg)](https://david-dm.org/atom/image-view) |
| [Incompatible Packages](https://github.com/atom/incompatible-packages) | [![macOS Build Status](https://travis-ci.org/atom/incompatible-packages.svg?branch=master)](https://travis-ci.org/atom/incompatible-packages) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/neet595s038x7w70/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/incompatible-packages/branch/master) | [![Dependency Status](https://david-dm.org/atom/incompatible-packages.svg)](https://david-dm.org/atom/incompatible-packages) |
| [Keybinding Resolver](https://github.com/atom/keybinding-resolver) | [![macOS Build Status](https://travis-ci.org/atom/keybinding-resolver.svg?branch=master)](https://travis-ci.org/atom/keybinding-resolver) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/9jf31itx01hnn4nh/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/keybinding-resolver/branch/master) | [![Dependency Status](https://david-dm.org/atom/keybinding-resolver.svg)](https://david-dm.org/atom/keybinding-resolver) |
| [Line Ending Selector](https://github.com/atom/line-ending-selector) | [![macOS Build Status](https://travis-ci.org/atom/line-ending-selector.svg?branch=master)](https://travis-ci.org/atom/line-ending-selector) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/b3743n9ojomlpn1g/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/line-ending-selector/branch/master) | [![Dependency Status](https://david-dm.org/atom/line-ending-selector.svg)](https://david-dm.org/atom/line-ending-selector) |
| [Link](https://github.com/atom/link) | [![macOS Build Status](https://travis-ci.org/atom/link.svg?branch=master)](https://travis-ci.org/atom/link) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1d3cb8ktd48k9vnl/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/link/branch/master) | [![Dependency Status](https://david-dm.org/atom/link.svg)](https://david-dm.org/atom/link) |
| [Markdown Preview](https://github.com/atom/markdown-preview) | [![macOS Build Status](https://travis-ci.org/atom/markdown-preview.svg?branch=master)](https://travis-ci.org/atom/markdown-preview) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/bvh0evhh4v6w9b29/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/markdown-preview/branch/master) | [![Dependency Status](https://david-dm.org/atom/markdown-preview.svg)](https://david-dm.org/atom/markdown-preview) |
| [Metrics](https://github.com/atom/metrics) | [![macOS Build Status](https://travis-ci.org/atom/metrics.svg?branch=master)](https://travis-ci.org/atom/metrics) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/b5doi205xl3iex04/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/metrics/branch/master) | [![Dependency Status](https://david-dm.org/atom/metrics.svg)](https://david-dm.org/atom/metrics) |
| [Notifications](https://github.com/atom/notifications) | [![macOS Build Status](https://travis-ci.org/atom/notifications.svg?branch=master)](https://travis-ci.org/atom/notifications) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ps3p8tj2okw57x0e/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/notifications/branch/master) | [![Dependency Status](https://david-dm.org/atom/notifications.svg)](https://david-dm.org/atom/notifications) |
| [Open on GitHub](https://github.com/atom/open-on-github) | [![macOS Build Status](https://travis-ci.org/atom/open-on-github.svg?branch=master)](https://travis-ci.org/atom/open-on-github) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ccl6na4qsna5wncr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/open-on-github/branch/master) | [![Dependency Status](https://david-dm.org/atom/open-on-github.svg)](https://david-dm.org/atom/open-on-github) |
| [Package Generator](https://github.com/atom/package-generator) | [![macOS Build Status](https://travis-ci.org/atom/package-generator.svg?branch=master)](https://travis-ci.org/atom/package-generator)| [![Windows Build Status](https://ci.appveyor.com/api/projects/status/7t1i4hdmljhigp9u/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/package-generator/branch/master) | [![Dependency Status](https://david-dm.org/atom/package-generator.svg)](https://david-dm.org/atom/package-generator) |
| [Settings View](https://github.com/atom/settings-view) | [![macOS Build Status](https://travis-ci.org/atom/settings-view.svg?branch=master)](https://travis-ci.org/atom/settings-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/hatgxg6k2g3grafq/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/settings-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/settings-view.svg)](https://david-dm.org/atom/settings-view) |
| [Snippets](https://github.com/atom/snippets) | [![macOS Build Status](https://travis-ci.org/atom/snippets.svg?branch=master)](https://travis-ci.org/atom/snippets) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/8hlc0onofkgbxw53/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/snippets/branch/master) | [![Dependency Status](https://david-dm.org/atom/snippets.svg)](https://david-dm.org/atom/snippets) |
| [Spell Check](https://github.com/atom/spell-check) | [![macOS Build Status](https://travis-ci.org/atom/spell-check.svg?branch=master)](https://travis-ci.org/atom/spell-check) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/1620a5reqw6kdolv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/spell-check/branch/master) | [![Dependency Status](https://david-dm.org/atom/spell-check.svg)](https://david-dm.org/atom/spell-check) |
| [Status Bar](https://github.com/atom/status-bar) | [![macOS Build Status](https://travis-ci.org/atom/status-bar.svg?branch=master)](https://travis-ci.org/atom/status-bar) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gu8tv4h6cnpeesg2/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/status-bar/branch/master) | [![Dependency Status](https://david-dm.org/atom/status-bar.svg)](https://david-dm.org/atom/status-bar) |
| [Styleguide](https://github.com/atom/styleguide) | [![macOS Build Status](https://travis-ci.org/atom/styleguide.svg?branch=master)](https://travis-ci.org/atom/styleguide) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/88dt9jxexkpindhw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/styleguide/branch/master) | [![Dependency Status](https://david-dm.org/atom/styleguide.svg)](https://david-dm.org/atom/styleguide) |
| [Symbols View](https://github.com/atom/symbols-view) | [![macOS Build Status](https://travis-ci.org/atom/symbols-view.svg?branch=master)](https://travis-ci.org/atom/symbols-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/al68vtv83x49eu5d/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/symbols-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/symbols-view.svg)](https://david-dm.org/atom/symbols-view) |
| [Tabs](https://github.com/atom/tabs) | [![macOS Build Status](https://travis-ci.org/atom/tabs.svg?branch=master)](https://travis-ci.org/atom/tabs) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/nf4hdmuk4i9xkfmb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/tabs/branch/master) | [![Dependency Status](https://david-dm.org/atom/tabs.svg)](https://david-dm.org/atom/tabs) |
| [Timecop](https://github.com/atom/timecop) | [![macOS Build Status](https://travis-ci.org/atom/timecop.svg?branch=master)](https://travis-ci.org/atom/timecop) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/37fhichmvx90sd97/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/timecop/branch/master) | [![Dependency Status](https://david-dm.org/atom/timecop.svg)](https://david-dm.org/atom/timecop) |
| [Tree View](https://github.com/atom/tree-view) | [![macOS Build Status](https://travis-ci.org/atom/tree-view.svg?branch=master)](https://travis-ci.org/atom/tree-view) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/com793ehi0hajrkd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/tree-view/branch/master) | [![Dependency Status](https://david-dm.org/atom/tree-view.svg)](https://david-dm.org/atom/tree-view) |
| [Update Package Dependencies](https://github.com/atom/update-package-dependencies) | [![macOS Build Status](https://travis-ci.org/atom/update-package-dependencies.svg?branch=master)](https://travis-ci.org/atom/update-package-dependencies) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5xqtoc3xk1e7lt2y/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/update-package-dependencies/branch/master) | [![Dependency Status](https://david-dm.org/atom/update-package-dependencies.svg)](https://david-dm.org/atom/update-package-dependencies) |
| [Welcome](https://github.com/atom/welcome) | [![macOS Build Status](https://travis-ci.org/atom/welcome.svg?branch=master)](https://travis-ci.org/atom/welcome) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/c3ssyte35ivvnt62/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/welcome/branch/master) | [![Dependency Status](https://david-dm.org/atom/welcome.svg)](https://david-dm.org/atom/welcome) |
| [Whitespace](https://github.com/atom/whitespace) | [![macOS Build Status](https://travis-ci.org/atom/whitespace.svg?branch=master)](https://travis-ci.org/atom/whitespace) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/sf8pdb3ausdk1vtb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/whitespace/branch/master) | [![Dependency Status](https://david-dm.org/atom/whitespace.svg)](https://david-dm.org/atom/whitespace) |
| [Wrap Guide](https://github.com/atom/wrap-guide) | [![macOS Build Status](https://travis-ci.org/atom/wrap-guide.svg?branch=master)](https://travis-ci.org/atom/wrap-guide) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5qk1io3uar5j8hol/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/wrap-guide/branch/master) | [![Dependency Status](https://david-dm.org/atom/wrap-guide.svg)](https://david-dm.org/atom/wrap-guide) |
| Package | Github Actions | Dependencies |
|---|---|---|
| [About](https://github.com/atom/atom/tree/master/packages/about) | | [![Dependency Status](https://david-dm.org/atom/about.svg)](https://david-dm.org/atom/about) |
| [Archive View](https://github.com/atom/archive-view) | [![build](https://github.com/atom/archive-view/workflows/CI/badge.svg)](https://github.com/atom/archive-view/actions) | [![Dependency Status](https://david-dm.org/atom/archive-view.svg)](https://david-dm.org/atom/archive-view) |
| [AutoComplete Atom API](https://github.com/atom/autocomplete-atom-api) | [![build](https://github.com/atom/autocomplete-atom-api/workflows/CI/badge.svg)](https://github.com/atom/autocomplete-atom-api/actions) | [![Dependency Status](https://david-dm.org/atom/autocomplete-atom-api.svg)](https://david-dm.org/atom/autocomplete-atom-api) |
| [AutoComplete CSS](https://github.com/atom/autocomplete-css) | [![build](https://github.com/atom/autocomplete-css/workflows/CI/badge.svg)](https://github.com/atom/autocomplete-css/actions) | [![Dependency Status](https://david-dm.org/atom/autocomplete-css.svg)](https://david-dm.org/atom/autocomplete-css) |
| [AutoComplete HTML](https://github.com/atom/autocomplete-html) | [![build](https://github.com/atom/autocomplete-html/workflows/CI/badge.svg)](https://github.com/atom/autocomplete-html/actions) | [![Dependency Status](https://david-dm.org/atom/autocomplete-html.svg)](https://david-dm.org/atom/autocomplete-html) |
| [AutoComplete+](https://github.com/atom/autocomplete-plus) | [![build](https://github.com/atom/autocomplete-plus/workflows/CI/badge.svg)](https://github.com/atom/autocomplete-plus/actions) | [![Dependency Status](https://david-dm.org/atom/autocomplete-plus.svg)](https://david-dm.org/atom/autocomplete-plus) |
| [AutoComplete Snippets](https://github.com/atom/autocomplete-snippets) | [![build](https://github.com/atom/autocomplete-snippets/workflows/CI/badge.svg)](https://github.com/atom/autocomplete-snippets/actions) | [![Dependency Status](https://david-dm.org/atom/autocomplete-snippets.svg)](https://david-dm.org/atom/autocomplete-snippets) |
| [AutoFlow](https://github.com/atom/atom/tree/master/packages/autoflow) | | [![Dependency Status](https://david-dm.org/atom/autoflow.svg)](https://david-dm.org/atom/autoflow) |
| [AutoSave](https://github.com/atom/autosave) | [![build](https://github.com/atom/autosave/workflows/CI/badge.svg)](https://github.com/atom/autosave/actions) | [![Dependency Status](https://david-dm.org/atom/autosave.svg)](https://david-dm.org/atom/autosave) |
| [Background Tips](https://github.com/atom/background-tips) | [![build](https://github.com/atom/background-tips/workflows/CI/badge.svg)](https://github.com/atom/background-tips/actions) | [![Dependency Status](https://david-dm.org/atom/background-tips.svg)](https://david-dm.org/atom/background-tips) |
| [Bookmarks](https://github.com/atom/bookmarks) | [![build](https://github.com/atom/bookmarks/workflows/CI/badge.svg)](https://github.com/atom/bookmarks/actions) | [![Dependency Status](https://david-dm.org/atom/bookmarks.svg)](https://david-dm.org/atom/bookmarks) |
| [Bracket Matcher](https://github.com/atom/bracket-matcher) | [![build](https://github.com/atom/bracket-matcher/workflows/CI/badge.svg)](https://github.com/atom/bracket-matcher/actions) | [![Dependency Status](https://david-dm.org/atom/bracket-matcher.svg)](https://david-dm.org/atom/bracket-matcher) |
| [Command Palette](https://github.com/atom/command-palette) | [![build](https://github.com/atom/command-palette/workflows/CI/badge.svg)](https://github.com/atom/command-palette/actions) | [![Dependency Status](https://david-dm.org/atom/command-palette.svg)](https://david-dm.org/atom/command-palette) |
| [Deprecation Cop](https://github.com/atom/atom/tree/master/packages/deprecation-cop) | | [![Dependency Status](https://david-dm.org/atom/deprecation-cop.svg)](https://david-dm.org/atom/deprecation-cop) |
| [Dev Live Reload](https://github.com/atom/atom/tree/master/packages/dev-live-reload) | | [![Dependency Status](https://david-dm.org/atom/dev-live-reload.svg)](https://david-dm.org/atom/dev-live-reload) |
| [Encoding Selector](https://github.com/atom/encoding-selector) | [![build](https://github.com/atom/encoding-selector/workflows/CI/badge.svg)](https://github.com/atom/encoding-selector/actions) | [![Dependency Status](https://david-dm.org/atom/encoding-selector.svg)](https://david-dm.org/atom/encoding-selector) |
| [Exception Reporting](https://github.com/atom/atom/tree/master/packages/exception-reporting) | | [![Dependency Status](https://david-dm.org/atom/exception-reporting.svg)](https://david-dm.org/atom/exception-reporting) |
| [Find and Replace](https://github.com/atom/find-and-replace) | [![build](https://github.com/atom/find-and-replace/workflows/CI/badge.svg)](https://github.com/atom/find-and-replace/actions) | [![Dependency Status](https://david-dm.org/atom/find-and-replace.svg)](https://david-dm.org/atom/find-and-replace) |
| [Fuzzy Finder](https://github.com/atom/fuzzy-finder) | [![build](https://github.com/atom/fuzzy-finder/workflows/CI/badge.svg)](https://github.com/atom/fuzzy-finder/actions) | [![Dependency Status](https://david-dm.org/atom/fuzzy-finder.svg)](https://david-dm.org/atom/fuzzy-finder) |
| [GitHub](https://github.com/atom/github) | [![Build Status](https://github.com/atom/github/workflows/ci/badge.svg)](https://github.com/atom/github/actions?query=workflow%3Aci+branch%3Amaster) | [![Dependency Status](https://david-dm.org/atom/github.svg)](https://david-dm.org/atom/github) |
| [Git Diff](https://github.com/atom/atom/tree/master/packages/) | | [![Dependency Status](https://david-dm.org/atom/git-diff.svg)](https://david-dm.org/atom/git-diff) |
| [Go to Line](https://github.com/atom/atom/tree/master/packages/) | | [![Dependency Status](https://david-dm.org/atom/go-to-line.svg)](https://david-dm.org/atom/go-to-line) |
| [Grammar Selector](https://github.com/atom/atom/tree/master/packages/grammar-selector) | | [![Dependency Status](https://david-dm.org/atom/grammar-selector.svg)](https://david-dm.org/atom/grammar-selector) |
| [Image View](https://github.com/atom/image-view) | [![build](https://github.com/atom/image-view/workflows/CI/badge.svg)](https://github.com/atom/image-view/actions) | [![Dependency Status](https://david-dm.org/atom/image-view.svg)](https://david-dm.org/atom/image-view) |
| [Incompatible Packages](https://github.com/atom/incompatible-packages) | | [![Dependency Status](https://david-dm.org/atom/incompatible-packages.svg)](https://david-dm.org/atom/incompatible-packages) |
| [Keybinding Resolver](https://github.com/atom/keybinding-resolver) | [![build](https://github.com/atom/keybinding-resolver/workflows/CI/badge.svg)](https://github.com/atom/keybinding-resolver/actions) | [![Dependency Status](https://david-dm.org/atom/keybinding-resolver.svg)](https://david-dm.org/atom/keybinding-resolver) |
| [Line Ending Selector](https://github.com/atom/atom/tree/master/packages/line-ending-selector) | | [![Dependency Status](https://david-dm.org/atom/line-ending-selector.svg)](https://david-dm.org/atom/line-ending-selector) |
| [Link](https://github.com/atom/atom/tree/master/packages/link) | | [![Dependency Status](https://david-dm.org/atom/link.svg)](https://david-dm.org/atom/link) |
| [Markdown Preview](https://github.com/atom/markdown-preview) | [![build](https://github.com/atom/markdown-preview/workflows/CI/badge.svg)](https://github.com/atom/markdown-preview/actions) | [![Dependency Status](https://david-dm.org/atom/markdown-preview.svg)](https://david-dm.org/atom/markdown-preview) |
| [Metrics](https://github.com/atom/metrics) | [![build](https://github.com/atom/metrics/workflows/CI/badge.svg)](https://github.com/atom/metrics/actions) | [![Dependency Status](https://david-dm.org/atom/metrics.svg)](https://david-dm.org/atom/metrics) |
| [Notifications](https://github.com/atom/notifications) | [![build](https://github.com/atom/notifications/workflows/CI/badge.svg)](https://github.com/atom/notifications/actions) | [![Dependency Status](https://david-dm.org/atom/notifications.svg)](https://david-dm.org/atom/notifications) |
| [Open on GitHub](https://github.com/atom/open-on-github) | [![build](https://github.com/atom/open-on-github/workflows/CI/badge.svg)](https://github.com/atom/open-on-github/actions) | [![Dependency Status](https://david-dm.org/atom/open-on-github.svg)](https://david-dm.org/atom/open-on-github) |
| [Package Generator](https://github.com/atom/package-generator) | [![build](https://github.com/atom/package-generator/workflows/CI/badge.svg)](https://github.com/atom/package-generator/actions) | [![Dependency Status](https://david-dm.org/atom/package-generator.svg)](https://david-dm.org/atom/package-generator) |
| [Settings View](https://github.com/atom/settings-view) | [![build](https://github.com/atom/settings-view/workflows/CI/badge.svg)](https://github.com/atom/settings-view/actions) | [![Dependency Status](https://david-dm.org/atom/settings-view.svg)](https://david-dm.org/atom/settings-view) |
| [Snippets](https://github.com/atom/snippets) | [![build](https://github.com/atom/snippets/workflows/CI/badge.svg)](https://github.com/atom/snippets/actions) | [![Dependency Status](https://david-dm.org/atom/snippets.svg)](https://david-dm.org/atom/snippets) |
| [Spell Check](https://github.com/atom/spell-check) | [![build](https://github.com/atom/spell-check/workflows/CI/badge.svg)](https://github.com/atom/spell-check/actions) | [![Dependency Status](https://david-dm.org/atom/spell-check.svg)](https://david-dm.org/atom/spell-check) |
| [Status Bar](https://github.com/atom/status-bar) | [![build](https://github.com/atom/status-bar/workflows/CI/badge.svg)](https://github.com/atom/status-bar/actions) | [![Dependency Status](https://david-dm.org/atom/status-bar.svg)](https://david-dm.org/atom/status-bar) |
| [Styleguide](https://github.com/atom/styleguide) | [![build](https://github.com/atom/styleguide/workflows/CI/badge.svg)](https://github.com/atom/styleguide/actions) | [![Dependency Status](https://david-dm.org/atom/styleguide.svg)](https://david-dm.org/atom/styleguide) |
| [Symbols View](https://github.com/atom/symbols-view) | [![build](https://github.com/atom/symbols-view/workflows/CI/badge.svg)](https://github.com/atom/symbols-view/actions) | [![Dependency Status](https://david-dm.org/atom/symbols-view.svg)](https://david-dm.org/atom/symbols-view) |
| [Tabs](https://github.com/atom/tabs) | [![build](https://github.com/atom/tabs/workflows/CI/badge.svg)](https://github.com/atom/tabs/actions) | [![Dependency Status](https://david-dm.org/atom/tabs.svg)](https://david-dm.org/atom/tabs) |
| [Timecop](https://github.com/atom/timecop) | [![build](https://github.com/atom/timecop/workflows/CI/badge.svg)](https://github.com/atom/timecop/actions) | [![Dependency Status](https://david-dm.org/atom/timecop.svg)](https://david-dm.org/atom/timecop) |
| [Tree View](https://github.com/atom/tree-view) | [![build](https://github.com/atom/tree-view/workflows/CI/badge.svg)](https://github.com/atom/tree-view/actions) | [![Dependency Status](https://david-dm.org/atom/tree-view.svg)](https://david-dm.org/atom/tree-view) |
| [Update Package Dependencies](https://github.com/atom/atom/tree/master/packages/update-package-dependencies) | | [![Dependency Status](https://david-dm.org/atom/update-package-dependencies.svg)](https://david-dm.org/atom/update-package-dependencies) |
| [Welcome](https://github.com/atom/atom/tree/master/packages/welcome) | | [![Dependency Status](https://david-dm.org/atom/welcome.svg)](https://david-dm.org/atom/welcome) |
| [Whitespace](https://github.com/atom/whitespace) | [![build](https://github.com/atom/whitespace/workflows/CI/badge.svg)](https://github.com/atom/whitespace/actions) | [![Dependency Status](https://david-dm.org/atom/whitespace.svg)](https://david-dm.org/atom/whitespace) |
| [Wrap Guide](https://github.com/atom/wrap-guide) | [![build](https://github.com/atom/wrap-guide/workflows/CI/badge.svg)](https://github.com/atom/wrap-guide/actions) | [![Dependency Status](https://david-dm.org/atom/wrap-guide.svg)](https://david-dm.org/atom/wrap-guide) |
## Libraries
| Library | Travis | AppVeyor/Win | Dependencies |
|---------|--------|--------------|--------------|
| [Clear Cut](https://github.com/atom/clear-cut) | [![macOS Build Status](https://travis-ci.org/atom/clear-cut.svg?branch=master)](https://travis-ci.org/atom/clear-cut) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/civ54x89l06286m9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/clear-cut/branch/master) | [![Dependency Status](https://david-dm.org/atom/clear-cut.svg)](https://david-dm.org/atom/clear-cut) |
| [Event Kit](https://github.com/atom/event-kit) | [![macOS Build Status](https://travis-ci.org/atom/event-kit.svg?branch=master)](https://travis-ci.org/atom/event-kit) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/lb32q70204lpmlxo/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/event-kit/branch/master) | [![Dependency Status](https://david-dm.org/atom/event-kit.svg)](https://david-dm.org/atom/event-kit) |
| [First Mate](https://github.com/atom/first-mate) | [![macOS Build Status](https://travis-ci.org/atom/first-mate.svg?branch=master)](https://travis-ci.org/atom/first-mate) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/p5im21uq22cwgb6d/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/first-mate) | [![Dependency Status](https://david-dm.org/atom/first-mate/status.svg)](https://david-dm.org/atom/first-mate) |
| [Fs Plus](https://github.com/atom/fs-plus) | [![macOS Build Status](https://travis-ci.org/atom/fs-plus.svg?branch=master)](https://travis-ci.org/atom/fs-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gf2tleqp0hdek3o3/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/fs-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/fs-plus.svg)](https://david-dm.org/atom/fs-plus) |
| [Grim](https://github.com/atom/grim) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/i4m37pol77vygrvb/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/grim/branch/master) | [![Dependency Status](https://david-dm.org/atom/grim.svg)](https://david-dm.org/atom/grim) |
| [Jasmine Focused](https://github.com/atom/jasmine-focused) | [![macOS Build Status](https://travis-ci.org/atom/grim.svg)](https://travis-ci.org/atom/grim) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/af0ipfqqxn7aygoe/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/jasmine-focused/branch/master) | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) |
| [Keyboard Layout](https://github.com/atom/keyboard-layout) | [![macOS Build Status](https://travis-ci.org/atom/keyboard-layout.svg?branch=master)](https://travis-ci.org/atom/keyboard-layout) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/rk8wooeyh689apgd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/keyboard-layout) | [![Dependency Status](https://david-dm.org/atom/keyboard-layout/status.svg)](https://david-dm.org/atom/keyboard-layout) |
| [Oniguruma](https://github.com/atom/node-oniguruma) | [![macOS Build Status](https://travis-ci.org/atom/node-oniguruma.svg?branch=master)](https://travis-ci.org/atom/node-oniguruma) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/s9twhi451ef2butr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-oniguruma/branch/master) | [![Dependency Status](https://david-dm.org/atom/node-oniguruma.svg)](https://david-dm.org/atom/node-oniguruma) |
| [PathWatcher](https://github.com/atom/node-pathwatcher) | [![macOS Build Status](https://travis-ci.org/atom/node-pathwatcher.svg?branch=master)](https://travis-ci.org/atom/node-pathwatcher) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/li8dkoucdrc2ryts/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/node-pathwatcher) | [![Dependency Status](https://david-dm.org/atom/node-pathwatcher/status.svg)](https://david-dm.org/atom/node-pathwatcher) |
| [Property Accessors](https://github.com/atom/property-accessors) | [![macOS Build Status](https://travis-ci.org/atom/property-accessors.svg?branch=master)](https://travis-ci.org/atom/property-accessors) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ww4d10hi4v5h7kbp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/property-accessors/branch/master) | [![Dependency Status](https://david-dm.org/atom/property-accessors.svg)](https://david-dm.org/atom/property-accessors) |
| [Season](https://github.com/atom/season) | [![macOS Build Status](https://travis-ci.org/atom/season.svg?branch=master)](https://travis-ci.org/atom/season) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/v3bth3ooq5q8k8lx/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/season) | [![Dependency Status](https://david-dm.org/atom/season.svg)](https://david-dm.org/atom/season) |
| [Superstring](https://github.com/atom/superstring) | [![macOS Build Status](https://travis-ci.org/atom/superstring.svg?branch=master)](https://travis-ci.org/atom/superstring) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/n5pack4yk7w80fso/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/superstring/branch/master) | | [![Dependency Status](https://david-dm.org/atom/superstring.svg)](https://david-dm.org/atom/superstring) |
| [TextBuffer](https://github.com/atom/text-buffer) | [![macOS Build Status](https://travis-ci.org/atom/text-buffer.svg?branch=master)](https://travis-ci.org/atom/text-buffer) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/48xl8do1sm2thf5p/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/text-buffer/branch/master) | [![Dependency Status](https://david-dm.org/atom/text-buffer.svg)](https://david-dm.org/atom/text-buffer) |
| [Underscore-Plus](https://github.com/atom/underscore-plus) | [![macOS Build Status](https://travis-ci.org/atom/underscore-plus.svg?branch=master)](https://travis-ci.org/atom/underscore-plus) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/c7l8009vgpaojxcd/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/underscore-plus/branch/master) | [![Dependency Status](https://david-dm.org/atom/underscore-plus.svg)](https://david-dm.org/atom/underscore-plus) |
| Library | Github Actions | Dependencies |
|---------|----------------|--------------|
| [Clear Cut](https://github.com/atom/clear-cut) | | [![Dependency Status](https://david-dm.org/atom/clear-cut.svg)](https://david-dm.org/atom/clear-cut) |
| [Event Kit](https://github.com/atom/event-kit) | [![build](https://github.com/atom/event-kit/workflows/CI/badge.svg)](https://github.com/atom/event-kit/actions) | [![Dependency Status](https://david-dm.org/atom/event-kit.svg)](https://david-dm.org/atom/event-kit) |
| [First Mate](https://github.com/atom/first-mate) | [![build](https://github.com/atom/first-mate/workflows/CI/badge.svg)](https://github.com/atom/first-mate/actions) | [![Dependency Status](https://david-dm.org/atom/first-mate/status.svg)](https://david-dm.org/atom/first-mate) |
| [Fs Plus](https://github.com/atom/fs-plus) | [![build](https://github.com/atom/fs-plus/workflows/CI/badge.svg)](https://github.com/atom/fs-plus/actions) | [![Dependency Status](https://david-dm.org/atom/fs-plus.svg)](https://david-dm.org/atom/fs-plus) |
| [Grim](https://github.com/atom/grim) | [![build](https://github.com/atom/grim/workflows/CI/badge.svg)](https://github.com/atom/grim/actions) | [![Dependency Status](https://david-dm.org/atom/grim.svg)](https://david-dm.org/atom/grim) |
| [Jasmine Focused](https://github.com/atom/jasmine-focused) | | [![Dependency Status](https://david-dm.org/atom/jasmine-focused.svg)](https://david-dm.org/atom/jasmine-focused) |
| [Keyboard Layout](https://github.com/atom/keyboard-layout) | [![build](https://github.com/atom/keyboard-layout/workflows/CI/badge.svg)](https://github.com/atom/keyboard-layout/actions) | [![Dependency Status](https://david-dm.org/atom/keyboard-layout/status.svg)](https://david-dm.org/atom/keyboard-layout) |
| [Oniguruma](https://github.com/atom/node-oniguruma) | [![build](https://github.com/atom/node-oniguruma/workflows/CI/badge.svg)](https://github.com/atom/node-oniguruma/actions) | [![Dependency Status](https://david-dm.org/atom/node-oniguruma.svg)](https://david-dm.org/atom/node-oniguruma) |
| [PathWatcher](https://github.com/atom/node-pathwatcher) | [![build](https://github.com/atom/node-pathwatcher/workflows/ci/badge.svg)](https://github.com/atom/node-pathwatcher/actions) | [![Dependency Status](https://david-dm.org/atom/node-pathwatcher/status.svg)](https://david-dm.org/atom/node-pathwatcher) |
| [Property Accessors](https://github.com/atom/property-accessors) | | [![Dependency Status](https://david-dm.org/atom/property-accessors.svg)](https://david-dm.org/atom/property-accessors) |
| [Season](https://github.com/atom/season) | | [![Dependency Status](https://david-dm.org/atom/season.svg)](https://david-dm.org/atom/season) |
| [Superstring](https://github.com/atom/superstring) | [![build](https://github.com/atom/superstring/workflows/ci/badge.svg)](https://github.com/atom/superstring/actions) | [![Dependency Status](https://david-dm.org/atom/superstring.svg)](https://david-dm.org/atom/superstring) |
| [TextBuffer](https://github.com/atom/text-buffer) | [![build](https://github.com/atom/text-buffer/workflows/CI/badge.svg)](https://github.com/atom/text-buffer/actions) | [![Dependency Status](https://david-dm.org/atom/text-buffer.svg)](https://david-dm.org/atom/text-buffer) |
| [Underscore-Plus](https://github.com/atom/underscore-plus) | [![build](https://github.com/atom/underscore-plus/workflows/CI/badge.svg)](https://github.com/atom/underscore-plus/actions) | [![Dependency Status](https://david-dm.org/atom/underscore-plus.svg)](https://david-dm.org/atom/underscore-plus) |
## Tools
| Language | Travis | AppVeyor/Win | Dependencies |
|----------|--------|--------------|--------------|
| [AtomDoc](https://github.com/atom/atomdoc) | [![macOS Build Status](https://travis-ci.org/atom/atomdoc.svg?branch=master)](https://travis-ci.org/atom/atomdoc) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/chi2bmaafr3puyq2/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/atomdoc/branch/master) | [![Dependency Status](https://david-dm.org/atom/atomdoc.svg)](https://david-dm.org/atom/atomdoc)
| Language | Github Actions | Dependencies |
|----------|----------------|--------------|
| [AtomDoc](https://github.com/atom/atomdoc) | [![build](https://github.com/atom/atomdoc/workflows/CI/badge.svg)](https://github.com/atom/atomdoc/actions) | [![Dependency Status](https://david-dm.org/atom/atomdoc.svg)](https://david-dm.org/atom/atomdoc)
## Languages
| Language | Travis | AppVeyor/Win |
|----------|--------|--------------|
| [C/C++](https://github.com/atom/language-c) | [![macOS Build Status](https://travis-ci.org/atom/language-c.svg?branch=master)](https://travis-ci.org/atom/language-c) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/8oy1hmp4yrij7c32/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-c/branch/master) |
| [C#](https://github.com/atom/language-csharp) | [![macOS Build Status](https://travis-ci.org/atom/language-csharp.svg?branch=master)](https://travis-ci.org/atom/language-csharp) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/j1as3753y5t90obn/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-csharp/branch/master) |
| [Clojure](https://github.com/atom/language-clojure) | [![macOS Build Status](https://travis-ci.org/atom/language-clojure.svg?branch=master)](https://travis-ci.org/atom/language-clojure) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/6kd5fs48y5hixde6/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-clojure/branch/master) |
| [CoffeeScript](https://github.com/atom/language-coffee-script) | [![macOS Build Status](https://travis-ci.org/atom/language-coffee-script.svg?branch=master)](https://travis-ci.org/atom/language-coffee-script) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/4j9aak7iwn2f2x7a/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-coffee-script/branch/master) |
| [CSS](https://github.com/atom/language-css) | [![macOS Build Status](https://travis-ci.org/atom/language-css.svg?branch=master)](https://travis-ci.org/atom/language-css) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/v8rvm88dxp73ko2y/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-css/branch/master) |
| [Git](https://github.com/atom/language-git) | [![macOS Build Status](https://travis-ci.org/atom/language-git.svg?branch=master)](https://travis-ci.org/atom/language-git) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/481319gyrr1feo8b/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-git/branch/master) |
| [GitHub Flavored Markdown](https://github.com/atom/language-gfm) | [![macOS Build Status](https://travis-ci.org/atom/language-gfm.svg?branch=master)](https://travis-ci.org/atom/language-gfm) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/rpub8qjyd8lt7wai/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-gfm/branch/master) |
| [Go](https://github.com/atom/language-go) | [![macOS Build Status](https://travis-ci.org/atom/language-go.svg?branch=master)](https://travis-ci.org/atom/language-go) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/3fxxvv05p4hv92pn/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-go/branch/master) |
| [HTML](https://github.com/atom/language-html) | [![macOS Build Status](https://travis-ci.org/atom/language-html.svg?branch=master)](https://travis-ci.org/atom/language-html) | [![Windows Build status](https://ci.appveyor.com/api/projects/status/t6pk6mmdgcelfg85/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-html/branch/master) |
| [Hyperlink](https://github.com/atom/language-hyperlink) | [![macOS Build Status](https://travis-ci.org/atom/language-hyperlink.svg?branch=master)](https://travis-ci.org/atom/language-hyperlink) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5tgvhph394r684l8/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-hyperlink/branch/master) |
| [Java](https://github.com/atom/language-java) | [![macOS Build Status](https://travis-ci.org/atom/language-java.svg?branch=master)](https://travis-ci.org/atom/language-java) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/utoftje56n9u5x4h/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-java/branch/master) |
| [JavaScript](https://github.com/atom/language-javascript) | [![macOS Build Status](https://travis-ci.org/atom/language-javascript.svg?branch=master)](https://travis-ci.org/atom/language-javascript) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ktooccwna96ssiyr/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-javascript-dijf8/branch/master) |
| [JSON](https://github.com/atom/language-json) | [![macOS Build Status](https://travis-ci.org/atom/language-json.svg?branch=master)](https://travis-ci.org/atom/language-json) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5rx05vhdikk6c4cl/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-json/branch/master) |
| [Less](https://github.com/atom/language-less) | [![macOS Build Status](https://travis-ci.org/atom/language-less.svg?branch=master)](https://travis-ci.org/atom/language-less) | [![Windows Build Sstatus](https://ci.appveyor.com/api/projects/status/aeina4fr4b0i7yay/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-less/branch/master) |
| [Make](https://github.com/atom/language-make) | [![macOS Build Status](https://travis-ci.org/atom/language-make.svg?branch=master)](https://travis-ci.org/atom/language-make) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/vq1aascey21wxjh7/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-make/branch/master) |
| [Mustache](https://github.com/atom/language-mustache) | [![macOS Build Status](https://travis-ci.org/atom/language-mustache.svg?branch=master)](https://travis-ci.org/atom/language-mustache) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/mbxnxaojqp0g7ldv/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-mustache/branch/master) |
| [Objective-C](https://github.com/atom/language-objective-c) | [![macOS Build Status](https://travis-ci.org/atom/language-objective-c.svg?branch=master)](https://travis-ci.org/atom/language-objective-c) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/27j8vfv5u95fjhkw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-objective-c/branch/master) |
| [Perl](https://github.com/atom/language-perl) | [![macOS Build Status](https://travis-ci.org/atom/language-perl.svg?branch=master)](https://travis-ci.org/atom/language-perl) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/dfs9inkkg40hchf8/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-perl/branch/master) |
| [PHP](https://github.com/atom/language-php) | [![macOS Build Status](https://travis-ci.org/atom/language-php.svg?branch=master)](https://travis-ci.org/atom/language-php) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/y9h45ag4b72726jy/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-php/branch/master) |
| [Python](https://github.com/atom/language-python) | [![macOS Build Status](https://travis-ci.org/atom/language-python.svg?branch=master)](https://travis-ci.org/atom/language-python) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/hmxrb9jttjh41es9/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-python/branch/master) |
| [Ruby](https://github.com/atom/language-ruby) | [![macOS Build Status](https://travis-ci.org/atom/language-ruby.svg?branch=master)](https://travis-ci.org/atom/language-ruby) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/71as182rm1adf2br/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-ruby/branch/master) |
| [Ruby on Rails](https://github.com/atom/language-ruby-on-rails) | [![macOS Build Status](https://travis-ci.org/atom/language-ruby-on-rails.svg?branch=master)](https://travis-ci.org/atom/language-ruby-on-rails) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/5t4pa451fu5e0ghg/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-ruby-on-rails/branch/master) |
| [Sass](https://github.com/atom/language-sass) | [![macOS Build Status](https://travis-ci.org/atom/language-sass.svg?branch=master)](https://travis-ci.org/atom/language-sass) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/g7p16vainm4iuoot/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-sass/branch/master) |
| [ShellScript](https://github.com/atom/language-shellscript) | [![macOS Build Status](https://travis-ci.org/atom/language-shellscript.svg?branch=master)](https://travis-ci.org/atom/language-shellscript) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/p4um3lowgrg8y0ty/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-shellscript/branch/master) |
| [SQL](https://github.com/atom/language-sql) | [![macOS Build Status](https://travis-ci.org/atom/language-sql.svg?branch=master)](https://travis-ci.org/atom/language-sql) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/ji31ouk5ehs4jdu1/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-sql/branch/master) |
| [Text](https://github.com/atom/language-text) | [![macOS Build Status](https://travis-ci.org/atom/language-text.svg?branch=master)](https://travis-ci.org/atom/language-text) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/psnekekg8lon67dw/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-text/branch/master) |
| [TODO](https://github.com/atom/language-todo) | [![macOS Build Status](https://travis-ci.org/atom/language-todo.svg?branch=master)](https://travis-ci.org/atom/language-todo) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/gcgb9m7h146lv6qp/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-todo/branch/master) |
| [TOML](https://github.com/atom/language-toml) | [![macOS Build Status](https://travis-ci.org/atom/language-toml.svg?branch=master)](https://travis-ci.org/atom/language-toml) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/kohao3fjyk6xv0sc/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-toml/branch/master) |
| [XML](https://github.com/atom/language-xml) | [![macOS Build Status](https://travis-ci.org/atom/language-xml.svg?branch=master)](https://travis-ci.org/atom/language-xml) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/m5f6rn74a6h3q5uq/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-xml/branch/master) |
| [YAML](https://github.com/atom/language-yaml) | [![macOS Build Status](https://travis-ci.org/atom/language-yaml.svg?branch=master)](https://travis-ci.org/atom/language-yaml) | [![Windows Build Status](https://ci.appveyor.com/api/projects/status/eaa4ql7kipgphc2n/branch/master?svg=true)](https://ci.appveyor.com/project/Atom/language-yaml/branch/master) |
| Language | Github Actions |
|----------|----------------|
| [C/C++](https://github.com/atom/language-c) | [![build](https://github.com/atom/language-c/workflows/CI/badge.svg)](https://github.com/atom/language-c/actions) |
| [C#](https://github.com/atom/language-csharp) | [![build](https://github.com/atom/language-csharp/workflows/CI/badge.svg)](https://github.com/atom/language-csharp/actions) |
| [Clojure](https://github.com/atom/language-clojure) | [![build](https://github.com/atom/language-clojure/workflows/CI/badge.svg)](https://github.com/atom/language-clojure/actions) |
| [CoffeeScript](https://github.com/atom/language-coffee-script) | [![build](https://github.com/atom/language-coffee-script/workflows/CI/badge.svg)](https://github.com/atom/language-coffee-script/actions) |
| [CSS](https://github.com/atom/language-css) | [![build](https://github.com/atom/language-css/workflows/CI/badge.svg)](https://github.com/atom/language-css/actions) |
| [Git](https://github.com/atom/language-git) | [![build](https://github.com/atom/language-git/workflows/CI/badge.svg)](https://github.com/atom/language-git/actions) |
| [GitHub Flavored Markdown](https://github.com/atom/language-gfm) | [![build](https://github.com/atom/language-gfm/workflows/CI/badge.svg)](https://github.com/atom/language-gfm/actions) |
| [Go](https://github.com/atom/language-go) | [![build](https://github.com/atom/language-go/workflows/CI/badge.svg)](https://github.com/atom/language-go/actions) |
| [HTML](https://github.com/atom/language-html) | [![build](https://github.com/atom/language-html/workflows/CI/badge.svg)](https://github.com/atom/language-html/actions) |
| [Hyperlink](https://github.com/atom/language-hyperlink) | [![build](https://github.com/atom/language-hyperlink/workflows/CI/badge.svg)](https://github.com/atom/language-hyperlink/actions) |
| [Java](https://github.com/atom/language-java) | [![build](https://github.com/atom/language-java/workflows/build/badge.svg)](https://github.com/atom/language-java/actions) |
| [JavaScript](https://github.com/atom/language-javascript) | [![build](https://github.com/atom/language-javascript/workflows/ci/badge.svg)](https://github.com/atom/language-javascript/actions) |
| [JSON](https://github.com/atom/language-json) | [![build](https://github.com/atom/language-json/workflows/CI/badge.svg)](https://github.com/atom/language-json/actions) |
| [Less](https://github.com/atom/language-less) | [![build](https://github.com/atom/language-less/workflows/CI/badge.svg)](https://github.com/atom/language-less/actions) |
| [Make](https://github.com/atom/language-make) | [![build](https://github.com/atom/language-make/workflows/CI/badge.svg)](https://github.com/atom/language-make/actions) |
| [Mustache](https://github.com/atom/language-mustache) | [![build](https://github.com/atom/language-mustache/workflows/CI/badge.svg)](https://github.com/atom/language-mustache/actions) |
| [Objective-C](https://github.com/atom/language-objective-c) | [![build](https://github.com/atom/language-objective-c/workflows/CI/badge.svg)](https://github.com/atom/language-objective-c/actions) |
| [Pegjs](https://github.com/atom/language-pegjs) | |
| [Perl](https://github.com/atom/language-perl) | [![build](https://github.com/atom/language-perl/workflows/CI/badge.svg)](https://github.com/atom/language-perl/actions) |
| [PHP](https://github.com/atom/language-php) | [![build](https://github.com/atom/language-php/workflows/CI/badge.svg)](https://github.com/atom/language-php/actions) |
| [Property-List](https://github.com/atom/language-property-list) | [![build](https://github.com/atom/language-property-list/workflows/CI/badge.svg)](https://github.com/atom/language-property-list/actions) |
| [Puppet](https://github.com/atom/language-puppet) | [![build](https://github.com/atom/language-puppet/workflows/CI/badge.svg)](https://github.com/atom/language-puppet/actions) |
| [Python](https://github.com/atom/language-python) | [![build](https://github.com/atom/language-python/workflows/ci/badge.svg)](https://github.com/atom/language-python/actions) |
| [Ruby](https://github.com/atom/language-ruby) | [![build](https://github.com/atom/language-ruby/workflows/ci/badge.svg)](https://github.com/atom/language-ruby/actions) |
| [Ruby on Rails](https://github.com/atom/atom/tree/master/packages/ruby-on-rails) | |
| [Sass](https://github.com/atom/language-sass) | [![build](https://github.com/atom/language-sass/workflows/CI/badge.svg)](https://github.com/atom/language-sass/actions) |
| [Shellscript](https://github.com/atom/language-shellscript) | [![build](https://github.com/atom/language-shellscript/workflows/CI/badge.svg)](https://github.com/atom/language-shellscript/actions) |
| [Source](https://github.com/atom/language-source) | [![build](https://github.com/atom/language-source/workflows/CI/badge.svg)](https://github.com/atom/language-source/actions) |
| [SQL](https://github.com/atom/language-sql) | [![build](https://github.com/atom/language-sql/workflows/CI/badge.svg)](https://github.com/atom/language-sql/actions) |
| [Text](https://github.com/atom/language-text) | [![build](https://github.com/atom/language-text/workflows/CI/badge.svg)](https://github.com/atom/language-text/actions) |
| [TODO](https://github.com/atom/language-todo) | [![build](https://github.com/atom/language-todo/workflows/CI/badge.svg)](https://github.com/atom/language-todo/actions) |
| [TOML](https://github.com/atom/language-toml) | [![build](https://github.com/atom/language-toml/workflows/CI/badge.svg)](https://github.com/atom/language-toml/actions) |
| [TypeScript](https://github.com/atom/language-typescript) | [![build](https://github.com/atom/language-typescript/workflows/CI/badge.svg)](https://github.com/atom/language-typescript/actions) |
| [XML](https://github.com/atom/language-xml) | [![build](https://github.com/atom/language-xml/workflows/CI/badge.svg)](https://github.com/atom/language-xml/actions) |
| [YAML](https://github.com/atom/language-yaml) | [![build](https://github.com/atom/language-yaml/workflows/CI/badge.svg)](https://github.com/atom/language-yaml/actions) |

View File

@ -0,0 +1,59 @@
# Add comment delims to grammar declaration
## Status
Proposed
## Summary
Grammars currently only sort of declare their comment delims. E.g., TextMate JavaScript will say `'commentStart': '// '` (and not even in the same file as the grammar), and Tree-sitter says `comments: start: '// '` (in the same file; better). However, it is impossible to tell that `/* */` delimits JS block comments. This RFC is to request a grammar property to declare all comment delims a language supports.
## Motivation
It can be useful for a package to be able to treat comment characters abstractly.
My specific need is for the resolution of `BLOCK_COMMENT_START` and similar variables for LSP snippets. There is currently no way I know of to resolve this without hardcoding it for each language.
## Explanation
This RFC is to have both line and block delims a property of the grammar. E.g.,
```cson
# javascript.cson
comments:
line: '//'
start: '/*'
end: '*/'
```
The lack of a property would indicate the grammar does not have it (e.g., HTML would omit the `line` property), or that a grammar has not been updated to comply with this spec. If the latter, it may be possible to partially extract this information from the existing implementations (e.g., even now we can tell that JS has `//` for line comment and HTML has `<!-- -->` for block comments).
This is similar to the current Tree-sitter grammars, but they currently mix line and block in the `start` key depending on if the language has line comments (so HTML has `start: '<!--', end: '-->'`, but JS has `start: '//'`).
## Drawbacks
Many community grammars would not get this property added to them. However, this feature can be considered a strict enhancement of the current status, and non compliant grammars can be accounted for. E.g., if a grammar still declares `start: '//'` but doesn't have an `end` property, then it can be reinterpreted as a line delim. Additionally, users would be quick to raise an issue here (:frowning_face:) or on the language repo (:slightly_smiling_face:) if they are trying to use a feature that relies on this and it doesn't work.
## Rationale and alternatives
#### Why is this approach the best in the space of possible approaches?
Tying all language specific data to the language file makes intuitive sense. This is stuff that will not change based on what the user wants (and already is tied directly to Tree-sitter language files).
#### What other approaches have been considered and what is the rationale for not choosing them?
It's possible to use the settings approach like for TextMate grammars. I find this unnecessarily separated though, especially for something like comment delims which shouldn't rely on what the user fancies.
However, I'm not set on requiring the TextMate grammars to have it in the file (doing so would require an update on the First mate side too*). It can still work in the settings file. This would also support the possible language that has multiple delim characters (if it exists), letting the user set their choice.
\* Maybe First mate should just add all properties from the file to the grammar it constructs, instead of a whitelist? It would save headaches around enhancing future grammar features.
#### What is the impact of not doing this?
Getting the snippet variables working would require hard coding them for each language, which is impossible to do completely.
## Unresolved questions
#### What unresolved questions do you expect to resolve through the RFC process before this gets merged?
#### What unresolved questions do you expect to resolve through the implementation of this feature before it is released in a new version of Atom?
#### What related issues do you consider out of scope for this RFC that could be addressed in the future independently of the solution that comes out of this RFC?
What I would like is then for public TextEditor methods `getCommentDelims` and `getCommentDelimsForPoint`, which returns all the correct delims for the root grammar, or the one at the given point (accounting for embedded grammars ... though could be weird when the embedded grammar is only something like TODO or SQL syntax).
However, this future enhancement is not necessary for the current RFC. This RFC is about getting comment delim information tied to the Grammar object and is independant of any attempt to handle this information.

View File

@ -0,0 +1,46 @@
# Pre-transpiled Atom packages
## Status
Proposed
## Summary
This feature will enable package authors to use conventional npm tooling and package.json conventions to take advantage of JavaScript transpilers like Babel or TypeScript.
## Motivation
Transpiling packages on _publish_ rather than _load_ will have great benefits for package authors:
* Standard `npm` tooling like `prepare` scripts will work for apm packages exactly as they work for npm packages. This will remove the need for custom transpiler pipeline modules like [atom-babel6-transpiler](https://github.com/atom/atom-babel6-transpiler) or [atom-typescript-transpiler](https://github.com/smhxx/atom-ts-transpiler) with their own, independent documentation, configuration and setup.
* Packages can move transpiler-related dependencies to `devDependencies` and trim installation bloat substantially. (as a data point, the TypeScript compiler is 30MB.)
* First-time package load will no longer take a hit from transpiling all of the source into the cache.
## Explanation
### Package publishing
During the `apm publish` call, apm will invoke [`npm pack`](https://docs.npmjs.com/cli/pack) to run all standard npm lifecycle hooks and prepare a `.tar.gz` file. apm then uploads the `.tar.gz` file to atom.io, which uploads it to an S3 bucket.
The `npm version` call will still be skipped if the `--tag` is provided, so manual publishing with `apm publish --tag` will still work as it does today.
### Package installation
When a user installs a package from atom.io, atom.io first checks to see if it has a precompiled tarball in its S3 bucket. If one is found, the artifact's public URL is returned as the `dist` field in the [API response](https://flight-manual.atom.io/atom-server-side-apis/sections/atom-package-server-api/#get-apipackagespackage_nameversionsversion_name). Otherwise, the existing logic is used to return the GitHub tag tarball URL that's returned now.
## Drawbacks
Doing this makes installing a package in production more different than loading it during development. This increases the number of variables that can cause issues between local development and the production of an `apm publish` artifact, like tweaking your `.npmignore` file properly.
## Rationale and alternatives
_Alternative: publish packages to Actual Npm.org._ We could identify Atom packages in the npm registry by the `engine` field we already use, which should keep regular npm from installing it by mistake. The downsides here are:
* It becomes harder to search for _just_ Atom packages; we'd have to hack npm search a bit.
* "Starring" would likely break.
* The transition path for existing users of apm and atom.io is not as smooth.
* Easier to typo `apm` and `npm` commands and have an undesirable outcome.
## Unresolved questions
Do we want to deprecate transpilation-on-demand for local development, as well? It may add a bit of friction for package development, but transpilers like TypeScript tend to offer a `--watch` option to transpile live, and it would let us eliminate a lot of complexity in the way Atom loads JavaScript.

View File

@ -0,0 +1,59 @@
# Semantic scope naming
## Status
Proposed
## Summary
When deciding which scopes to apply, built-in grammars should be guided only by what would be useful to annotate. A suggested scope addition should be assessed by the semantic value it adds. It not be rejected if its _only_ drawback is that it would result in undesirable syntax highlighting for one of Atoms built-in syntax themes.
## Motivation
Tree-sitter grammars are a unique opportunity to deliver more accurate scoping. They can identify constructs that wouldve been too ambiguous for a TM-style grammar.
Scopes themselves are immensely powerful; theyre hooks that allow weirdos like myself to customize Atom to my exact specifications. Not only for syntax themes, either; Ive got lots of commands that behave in different ways based on the surrounding scope. The richer the scope descriptor, the better. (Within reasonable bounds, of course.)
## Explanation
I think this is best illustrated by example. [Heres a ticket](https://github.com/atom/language-javascript/issues/615) from `language-javascript` about syntax highlighting of imports. For example:
```js
import { foo } from "thing";
```
For reference, the `language-babel` grammar scopes `foo` as `variable.other.readwrite.js`. Id probably opt for something like `variable.import`; others may want to put it into the `support` namespace. Theres actually little cross-language consensus here.
But right now, that `foo` doesnt have _any_ scope name applied in the tree-sitter JavaScript grammar, and this is by design. The explanation, as stated in the ticket, is that Atom wants to avoid marking a variable with a certain color if it doesnt have the capability of making it the same color _throughout_ the document, across its various usages.
This is a fine design goal; I dont think @maxbrunsfeld is wrong to argue for it. But Id suggest that it isnt a design goal for `language-javascript` or any other grammar; its a design goal for a _syntax theme_, and a grammar should not refrain from applying scopes in order to satisfy the design goals of a specific syntax theme.
This isnt just a beard-stroking nitpick on my part. I can think of a handful of reasons why someone might want to be able to spot import names at a glance. Its reasonable for someone to want `foo` in the example above to remain the same color throughout the file. Its also reasonable, I think, to want `foo` to have a special color on the line where its introduced. Or to communicate that this token has special behavior — as it would if you have the [js-hyperclick](https://atom.io/packages/js-hyperclick) package installed and are in the habit of cmd-clicking package names to jump to the files where theyre defined.
I dont mind that the One Dark syntax theme doesnt want to give `foo` a special color; I mind that its decision is also binding on _all possible_ syntax themes. If that scope name is present, and its undesirable to a syntax theme, that theme can apply the overrides necessary to ignore it. But if that scope name is missing altogether, that constrains _all_ syntax themes, and Im unable to write a syntax theme that behaves differently.
Thus, heres what I propose:
If an issue or PR proposes adding a scope and can justify its presence somehow — including the goal of parity with its non-tree-sitter predecessor — an answer of “no, because the built-in syntax themes dont want to highlight it that way” should become “OK, but only if someone does the associated work to ensure no visual regressions in the built-in syntax themes.” That someone could be the PRs author or anyone else who has an interest in getting it landed.
This is tricky, of course — not only the coordination of PRs across packages, but also the need to apply overrides to all six (is it six? I think its six) of the built-in syntax themes. If all built-in themes are going to share an austere philosophy ([and it seems like thats the plan](https://github.com/atom/atom/pull/18383#issuecomment-435460854)), then perhaps it makes sense for them to start sharing a core set of contextual rules. The only difference between them would be the specific color choices that they make.
## Drawbacks
The drawback is that what Im suggesting is a lot of work. I dont propose it lightly; I propose it because it strikes me as the least bad of all available choices.
## Rationale and alternatives
And what are those other choices?
1. The status quo, in which built-in grammars (like `language-javascript`s tree-sitter grammar) are developed with goals that are tightly coupled to the goals of syntax themes. I think this would be a tragic lost opportunity. The fact that the `tree-sitter-javascript` parser groks ES6 and JSX means that lots of people no longer have to rely on a third-party grammar like `language-babel`. If I cant get my syntax highlighting the way I want it because the built-in grammar applies scopes too sparsely, then my only recourse is to write my own tree-sitter grammar that adds in the mappings I want. Thats easier than writing a TM-style grammar, but it still involves some portion of the community dedicating their efforts to an effective fork of `language-javascript`, and for far more mundane reasons than the fork that produced `language-babel` in the first place.
2. A suggestion made by @Ben3eeE in [the issue that inspired this RFC](https://github.com/atom/language-javascript/issues/649): intentionally picking ornery scope names that dont have implicit highlighting in the built-in syntax themes. Thats at least a way forward, but I think it abandons a hard-won lesson. TextMates attempt to devise a system of semantic scope names has borne quite a bit of fruit. Its the reason why three major successor editors have signed on to the same conventions. Semantic naming acts as a kind of “middleware” that allows syntax themes and grammars to be unaware of each others implementation details. I _could_ write a PR that scopes our `foo` import from above with something like `import-specifier.identifier`, and I still might, but in choosing an arbitrary name Im once again obligating syntax themes to care about a grammars implementation details.
3. Some sort of grand compromise that I dont have the breadth of experience to envision on my own. Im hoping for this one, actually. For instance, it occurs to me that the “variables shouldnt ever be highlighted with different colors across different usages” problem is only a problem in languages where theres no sigil to mark variables. PHP, Perl, and Less dont have this problem because all variables begin with a symbol. Maybe the solution is to include some token like `without-sigil` in the scope name, and then the built-in themes can write a rule like `.syntax--without-sigil { color: @mono-1 !important }`.
## Unresolved questions
- Ideally, Id love to have some sort of canonical scope document like [TextMate](https://macromates.com/manual/en/language_grammars#naming_conventions) and [Sublime Text](https://www.sublimetext.com/docs/3/scope_naming.html) have. But the future of TM-style scope naming seems to be up in the air. I think that theyre no less relevant in the era of tree-sitter grammars, but I bet others disagree.
- To what extent should tree-sitter grammars be expected to scope documents identically to their TM-style predecessors? Obviously not 100%, or else thered be no gains. Whats the right balancing test?
- Atom has made some infrastructural choices that can complicate how scopes get applied and consumed. Are these permanent? For instance, if I wanted to implement Alternative 2 (as described above), I could choose a scope name like `meta.variable.import`, on the assumption that `meta.`-prefixed scope names wont have syntax highlighting. But `meta.variable` gets caught by a `.syntax--variable` CSS selector just as much as it would if the scope name began with `variable`. The order and hierarchy implied in the scope name is not actually present. Syntax themes could write selectors more creatively to get around this — e.g., `*[class^="syntax--variable "]` instead of `.syntax--variable` — but I dont think many do, and I can hardly blame them. Is this a limitation that Atom can evolve its way out of without breaking anything? Or are we stuck with it?

View File

@ -87,7 +87,7 @@
'alt-8': 'pane:show-item-8'
'alt-9': 'pane:show-item-9'
'atom-workspace atom-text-editor':
'atom-text-editor':
# Platform Bindings
'ctrl-left': 'editor:move-to-beginning-of-word'
'ctrl-right': 'editor:move-to-end-of-word'

View File

@ -92,7 +92,7 @@
'alt-8': 'pane:show-item-8'
'alt-9': 'pane:show-item-9'
'atom-workspace atom-text-editor':
'atom-text-editor':
# Platform Bindings
'ctrl-left': 'editor:move-to-beginning-of-word'
'ctrl-right': 'editor:move-to-end-of-word'

3025
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,7 @@
{
"name": "atom",
"productName": "Atom",
"version": "1.55.0-dev",
"version": "1.63.0-dev",
"description": "A hackable text editor for the 21st Century.",
"main": "./src/main-process/main.js",
"repository": {
@ -12,26 +12,27 @@
"url": "https://github.com/atom/atom/issues"
},
"license": "MIT",
"electronVersion": "6.1.12",
"electronVersion": "11.5.0",
"dependencies": {
"@atom/nsfw": "1.0.26",
"@atom/fuzzy-native": "^1.2.1",
"@atom/nsfw": "^1.0.28",
"@atom/source-map-support": "^0.3.4",
"@atom/watcher": "1.3.4-0",
"@atom/watcher": "^1.3.5",
"@babel/core": "7.12.3",
"babel-preset-atomic": "^3.0.0",
"about": "file:packages/about",
"archive-view": "https://www.atom.io/api/packages/archive-view/versions/0.65.2/tarball",
"archive-view": "https://www.atom.io/api/packages/archive-view/versions/0.66.0/tarball",
"async": "3.2.0",
"atom-dark-syntax": "file:packages/atom-dark-syntax",
"atom-dark-ui": "file:packages/atom-dark-ui",
"atom-keymap": "8.2.14",
"atom-keymap": "8.2.15",
"atom-light-syntax": "file:packages/atom-light-syntax",
"atom-light-ui": "file:packages/atom-light-ui",
"atom-select-list": "^0.7.2",
"atom-select-list": "^0.8.1",
"autocomplete-atom-api": "https://www.atom.io/api/packages/autocomplete-atom-api/versions/0.10.7/tarball",
"autocomplete-css": "https://www.atom.io/api/packages/autocomplete-css/versions/0.17.5/tarball",
"autocomplete-html": "https://www.atom.io/api/packages/autocomplete-html/versions/0.8.8/tarball",
"autocomplete-plus": "https://www.atom.io/api/packages/autocomplete-plus/versions/2.42.3/tarball",
"autocomplete-plus": "https://www.atom.io/api/packages/autocomplete-plus/versions/2.42.4/tarball",
"autocomplete-snippets": "https://www.atom.io/api/packages/autocomplete-snippets/versions/1.12.1/tarball",
"autoflow": "file:packages/autoflow",
"autosave": "https://www.atom.io/api/packages/autosave/versions/0.24.6/tarball",
@ -39,8 +40,8 @@
"base16-tomorrow-dark-theme": "file:packages/base16-tomorrow-dark-theme",
"base16-tomorrow-light-theme": "file:packages/base16-tomorrow-light-theme",
"bookmarks": "https://www.atom.io/api/packages/bookmarks/versions/0.46.0/tarball",
"bracket-matcher": "https://www.atom.io/api/packages/bracket-matcher/versions/0.91.2/tarball",
"chai": "4.2.0",
"bracket-matcher": "https://www.atom.io/api/packages/bracket-matcher/versions/0.92.0/tarball",
"chai": "4.3.4",
"chart.js": "2.9.4",
"clear-cut": "^2.0.2",
"coffee-script": "1.12.7",
@ -51,24 +52,25 @@
"deprecation-cop": "file:packages/deprecation-cop",
"dev-live-reload": "file:packages/dev-live-reload",
"devtron": "1.4.0",
"document-register-element": "^1.14.10",
"electron-notarize": "1.0.0",
"electron-osx-sign": "0.5.0",
"encoding-selector": "https://www.atom.io/api/packages/encoding-selector/versions/0.23.9/tarball",
"etch": "0.14.1",
"event-kit": "^2.5.3",
"exception-reporting": "file:packages/exception-reporting",
"find-and-replace": "https://www.atom.io/api/packages/find-and-replace/versions/0.219.7/tarball",
"find-and-replace": "https://www.atom.io/api/packages/find-and-replace/versions/0.219.8/tarball",
"find-parent-dir": "^0.3.0",
"first-mate": "7.4.1",
"focus-trap": "6.1.4",
"first-mate": "7.4.3",
"focus-trap": "6.3.0",
"fs-admin": "0.15.0",
"fs-plus": "^3.1.1",
"fstream": "1.0.12",
"fuzzaldrin": "^2.1",
"fuzzy-finder": "https://www.atom.io/api/packages/fuzzy-finder/versions/1.14.3/tarball",
"git-diff": "file:packages/git-diff",
"git-utils": "5.6.2",
"github": "https://www.atom.io/api/packages/github/versions/0.36.2/tarball",
"git-utils": "5.7.1",
"github": "https://www.atom.io/api/packages/github/versions/0.36.10/tarball",
"glob": "^7.1.1",
"go-to-line": "file:packages/go-to-line",
"grammar-selector": "file:packages/grammar-selector",
@ -79,18 +81,18 @@
"jasmine-reporters": "1.1.0",
"jasmine-tagged": "^1.1.4",
"key-path-helpers": "^0.4.0",
"keybinding-resolver": "https://www.atom.io/api/packages/keybinding-resolver/versions/0.39.0/tarball",
"keybinding-resolver": "https://www.atom.io/api/packages/keybinding-resolver/versions/0.39.1/tarball",
"language-c": "https://www.atom.io/api/packages/language-c/versions/0.60.19/tarball",
"language-clojure": "https://www.atom.io/api/packages/language-clojure/versions/0.22.8/tarball",
"language-coffee-script": "https://www.atom.io/api/packages/language-coffee-script/versions/0.50.0/tarball",
"language-csharp": "https://www.atom.io/api/packages/language-csharp/versions/1.1.0/tarball",
"language-css": "https://www.atom.io/api/packages/language-css/versions/0.44.4/tarball",
"language-css": "https://www.atom.io/api/packages/language-css/versions/0.45.1/tarball",
"language-gfm": "https://www.atom.io/api/packages/language-gfm/versions/0.90.8/tarball",
"language-git": "https://www.atom.io/api/packages/language-git/versions/0.19.1/tarball",
"language-go": "https://www.atom.io/api/packages/language-go/versions/0.47.2/tarball",
"language-html": "https://www.atom.io/api/packages/language-html/versions/0.53.1/tarball",
"language-hyperlink": "https://www.atom.io/api/packages/language-hyperlink/versions/0.17.1/tarball",
"language-java": "https://www.atom.io/api/packages/language-java/versions/0.32.0/tarball",
"language-java": "https://www.atom.io/api/packages/language-java/versions/0.32.1/tarball",
"language-javascript": "https://www.atom.io/api/packages/language-javascript/versions/0.134.1/tarball",
"language-json": "https://www.atom.io/api/packages/language-json/versions/1.0.5/tarball",
"language-less": "https://www.atom.io/api/packages/language-less/versions/0.34.3/tarball",
@ -98,10 +100,10 @@
"language-mustache": "https://www.atom.io/api/packages/language-mustache/versions/0.14.5/tarball",
"language-objective-c": "https://www.atom.io/api/packages/language-objective-c/versions/0.16.0/tarball",
"language-perl": "https://www.atom.io/api/packages/language-perl/versions/0.38.1/tarball",
"language-php": "https://www.atom.io/api/packages/language-php/versions/0.44.7/tarball",
"language-php": "https://www.atom.io/api/packages/language-php/versions/0.48.1/tarball",
"language-property-list": "https://www.atom.io/api/packages/language-property-list/versions/0.9.1/tarball",
"language-python": "https://www.atom.io/api/packages/language-python/versions/0.53.5/tarball",
"language-ruby": "https://www.atom.io/api/packages/language-ruby/versions/0.72.23/tarball",
"language-python": "https://www.atom.io/api/packages/language-python/versions/0.53.6/tarball",
"language-ruby": "https://www.atom.io/api/packages/language-ruby/versions/0.73.0/tarball",
"language-ruby-on-rails": "https://www.atom.io/api/packages/language-ruby-on-rails/versions/0.25.3/tarball",
"language-rust-bundled": "file:packages/language-rust-bundled",
"language-sass": "https://www.atom.io/api/packages/language-sass/versions/0.62.1/tarball",
@ -119,15 +121,14 @@
"line-top-index": "0.3.1",
"link": "file:packages/link",
"markdown-preview": "https://www.atom.io/api/packages/markdown-preview/versions/0.160.2/tarball",
"marked": "1.2.0",
"metrics": "https://www.atom.io/api/packages/metrics/versions/1.8.1/tarball",
"minimatch": "^3.0.3",
"mocha": "6.2.3",
"mocha-junit-reporter": "2.0.0",
"mocha-multi-reporters": "^1.1.4",
"mock-spawn": "^0.2.6",
"normalize-package-data": "3.0.0",
"notifications": "https://www.atom.io/api/packages/notifications/versions/0.71.0/tarball",
"normalize-package-data": "3.0.2",
"notifications": "https://www.atom.io/api/packages/notifications/versions/0.72.1/tarball",
"nslog": "^3.0.0",
"one-dark-syntax": "file:packages/one-dark-syntax",
"one-dark-ui": "file:packages/one-dark-ui",
@ -135,38 +136,39 @@
"one-light-ui": "file:packages/one-light-ui",
"open-on-github": "https://www.atom.io/api/packages/open-on-github/versions/1.3.2/tarball",
"package-generator": "https://www.atom.io/api/packages/package-generator/versions/1.3.0/tarball",
"pathwatcher": "8.1.0",
"postcss": "8.1.6",
"pathwatcher": "^8.1.2",
"postcss": "8.2.10",
"postcss-selector-parser": "6.0.4",
"prebuild-install": "6.0.0",
"property-accessors": "^1.1.3",
"resolve": "1.18.1",
"scandal": "^3.2.0",
"scoped-property-store": "^0.17.0",
"scrollbar-style": "3.2.1",
"scrollbar-style": "^4.0.1",
"season": "^6.0.2",
"semver": "7.3.2",
"service-hub": "^0.7.4",
"settings-view": "https://www.atom.io/api/packages/settings-view/versions/0.261.6/tarball",
"settings-view": "https://www.atom.io/api/packages/settings-view/versions/0.261.8/tarball",
"sinon": "9.2.1",
"snippets": "https://www.atom.io/api/packages/snippets/versions/1.5.1/tarball",
"solarized-dark-syntax": "file:packages/solarized-dark-syntax",
"solarized-light-syntax": "file:packages/solarized-light-syntax",
"spell-check": "https://www.atom.io/api/packages/spell-check/versions/0.76.2/tarball",
"spell-check": "https://www.atom.io/api/packages/spell-check/versions/0.77.1/tarball",
"status-bar": "https://www.atom.io/api/packages/status-bar/versions/1.8.17/tarball",
"styleguide": "https://www.atom.io/api/packages/styleguide/versions/0.49.12/tarball",
"superstring": "^2.4.4",
"symbols-view": "https://www.atom.io/api/packages/symbols-view/versions/0.118.4/tarball",
"tabs": "https://www.atom.io/api/packages/tabs/versions/0.110.0/tarball",
"tabs": "https://www.atom.io/api/packages/tabs/versions/0.110.2/tarball",
"temp": "0.9.2",
"text-buffer": "13.17.3",
"text-buffer": "^13.18.5",
"timecop": "https://www.atom.io/api/packages/timecop/versions/0.36.2/tarball",
"tree-sitter": "0.17.1",
"tree-view": "https://www.atom.io/api/packages/tree-view/versions/0.228.2/tarball",
"tree-sitter": "git+https://github.com/DeeDeeG/node-tree-sitter.git#bb298eaae66e0c4f11908cb6209f3e141884e88e",
"tree-view": "https://www.atom.io/api/packages/tree-view/versions/0.229.1/tarball",
"typescript-simple": "8.0.6",
"update-package-dependencies": "file:./packages/update-package-dependencies",
"vscode-ripgrep": "1.9.0",
"welcome": "file:packages/welcome",
"whitespace": "https://www.atom.io/api/packages/whitespace/versions/0.37.7/tarball",
"whitespace": "https://www.atom.io/api/packages/whitespace/versions/0.37.8/tarball",
"winreg": "^1.2.1",
"wrap-guide": "https://www.atom.io/api/packages/wrap-guide/versions/0.41.0/tarball",
"yargs": "16.1.0"
@ -185,63 +187,63 @@
"solarized-dark-syntax": "file:./packages/solarized-dark-syntax",
"solarized-light-syntax": "file:./packages/solarized-light-syntax",
"about": "file:./packages/about",
"archive-view": "0.65.2",
"archive-view": "0.66.0",
"autocomplete-atom-api": "0.10.7",
"autocomplete-css": "0.17.5",
"autocomplete-html": "0.8.8",
"autocomplete-plus": "2.42.3",
"autocomplete-plus": "2.42.4",
"autocomplete-snippets": "1.12.1",
"autoflow": "file:./packages/autoflow",
"autosave": "0.24.6",
"background-tips": "0.28.0",
"bookmarks": "0.46.0",
"bracket-matcher": "0.91.2",
"bracket-matcher": "0.92.0",
"command-palette": "0.43.5",
"dalek": "file:./packages/dalek",
"deprecation-cop": "file:./packages/deprecation-cop",
"dev-live-reload": "file:./packages/dev-live-reload",
"encoding-selector": "0.23.9",
"exception-reporting": "file:./packages/exception-reporting",
"find-and-replace": "0.219.7",
"find-and-replace": "0.219.8",
"fuzzy-finder": "1.14.3",
"github": "0.36.2",
"github": "0.36.10",
"git-diff": "file:./packages/git-diff",
"go-to-line": "file:./packages/go-to-line",
"grammar-selector": "file:./packages/grammar-selector",
"image-view": "0.64.0",
"incompatible-packages": "file:./packages/incompatible-packages",
"keybinding-resolver": "0.39.0",
"keybinding-resolver": "0.39.1",
"line-ending-selector": "file:./packages/line-ending-selector",
"link": "file:./packages/link",
"markdown-preview": "0.160.2",
"metrics": "1.8.1",
"notifications": "0.71.0",
"notifications": "0.72.1",
"open-on-github": "1.3.2",
"package-generator": "1.3.0",
"settings-view": "0.261.6",
"settings-view": "0.261.8",
"snippets": "1.5.1",
"spell-check": "0.76.2",
"spell-check": "0.77.1",
"status-bar": "1.8.17",
"styleguide": "0.49.12",
"symbols-view": "0.118.4",
"tabs": "0.110.0",
"tabs": "0.110.2",
"timecop": "0.36.2",
"tree-view": "0.228.2",
"tree-view": "0.229.1",
"update-package-dependencies": "file:./packages/update-package-dependencies",
"welcome": "file:./packages/welcome",
"whitespace": "0.37.7",
"whitespace": "0.37.8",
"wrap-guide": "0.41.0",
"language-c": "0.60.19",
"language-clojure": "0.22.8",
"language-coffee-script": "0.50.0",
"language-csharp": "1.1.0",
"language-css": "0.44.4",
"language-css": "0.45.1",
"language-gfm": "0.90.8",
"language-git": "0.19.1",
"language-go": "0.47.2",
"language-html": "0.53.1",
"language-hyperlink": "0.17.1",
"language-java": "0.32.0",
"language-java": "0.32.1",
"language-javascript": "0.134.1",
"language-json": "1.0.5",
"language-less": "0.34.3",
@ -249,10 +251,10 @@
"language-mustache": "0.14.5",
"language-objective-c": "0.16.0",
"language-perl": "0.38.1",
"language-php": "0.44.7",
"language-php": "0.48.1",
"language-property-list": "0.9.1",
"language-python": "0.53.5",
"language-ruby": "0.72.23",
"language-python": "0.53.6",
"language-ruby": "0.73.0",
"language-ruby-on-rails": "0.25.3",
"language-rust-bundled": "file:./packages/language-rust-bundled",
"language-sass": "0.62.1",
@ -284,4 +286,4 @@
"snapshotResult"
]
}
}
}

View File

@ -1,6 +1,6 @@
const { Disposable } = require('atom');
const etch = require('etch');
const shell = require('shell');
const { shell } = require('electron');
const AtomLogo = require('./atom-logo');
const EtchComponent = require('../etch-component');
const UpdateView = require('./update-view');

View File

@ -814,9 +814,9 @@
"dev": true
},
"hosted-git-info": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
"integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
"dev": true
},
"iconv-lite": {
@ -1058,9 +1058,9 @@
}
},
"lodash": {
"version": "4.17.20",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
"integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
"loose-envify": {
@ -1247,9 +1247,9 @@
"dev": true
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
"path-type": {

View File

@ -43,6 +43,7 @@ describe('About', () => {
describe('when the Atom version number is clicked', () => {
it('copies the version number to the clipboard', async () => {
await atom.workspace.open('atom://about');
jasmine.attachToDOM(workspaceElement);
let aboutElement = workspaceElement.querySelector('.about');
let versionContainer = aboutElement.querySelector('.atom');
@ -67,6 +68,7 @@ describe('About', () => {
describe('when the Electron version number is clicked', () => {
it('copies the version number to the clipboard', async () => {
await atom.workspace.open('atom://about');
jasmine.attachToDOM(workspaceElement);
let aboutElement = workspaceElement.querySelector('.about');
let versionContainer = aboutElement.querySelector('.electron');
@ -78,6 +80,7 @@ describe('About', () => {
describe('when the Chrome version number is clicked', () => {
it('copies the version number to the clipboard', async () => {
await atom.workspace.open('atom://about');
jasmine.attachToDOM(workspaceElement);
let aboutElement = workspaceElement.querySelector('.about');
let versionContainer = aboutElement.querySelector('.chrome');
@ -89,6 +92,7 @@ describe('About', () => {
describe('when the Node version number is clicked', () => {
it('copies the version number to the clipboard', async () => {
await atom.workspace.open('atom://about');
jasmine.attachToDOM(workspaceElement);
let aboutElement = workspaceElement.querySelector('.about');
let versionContainer = aboutElement.querySelector('.node');

View File

@ -22,6 +22,7 @@ describe('the status bar', () => {
await atom.packages.activatePackage('status-bar');
await atom.workspace.open('sample.js');
jasmine.attachToDOM(workspaceElement);
});
afterEach(async () => {

View File

@ -4,4 +4,8 @@
@import "styles/syntax-variables.less";
@import "styles/editor.less";
@import "styles/syntax.less";
@import "styles/syntax-legacy/_base.less";
@import "styles/syntax/base.less";
@import "styles/syntax/css.less";
@import "styles/syntax/html.less";

View File

@ -0,0 +1,267 @@
/*
This defines styling rules for syntax classes.
See the naming conventions for a list of syntax classes:
https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions
When styling rules conflict:
- The last rule overrides previous rules.
- The rule with most classes and pseudo-classes overrides the last rule.
*/
// if for return
.syntax--keyword {
color: #96CBFE;
// global let def class
&.syntax--storage {
color: #96CBFE;
}
// int char float
&.syntax--type {
color: #FFFFB6;
}
// and del not
&.syntax--operator {
color: #96CBFE;
}
// super
&.syntax--function {
color: #C6C5FE;
}
// this self
&.syntax--variable {
color: #C6C5FE;
}
// = + && | << ?
&.syntax--symbolic {
color: #EDEDED;
}
}
// identifier
.syntax--entity {
color: #C5C8C6;
// variable
&.syntax--variable {
color: #C5C8C6;
}
// self cls iota
&.syntax--support {
color: #C6C5FE;
}
// @entity.decorator
&.syntax--decorator:last-child {
color: #FFD2A7;
}
// label:
&.syntax--label {
text-decoration: underline;
}
// import package
&.syntax--package {
color: #FFD2A7;
}
// function method
&.syntax--function {
color: #FFD2A7;
}
// add
&.syntax--operator {
color: #FFD2A7;
// %>% <=>
&.syntax--symbolic {
color: #EDEDED;
}
}
// String Class int rune list
&.syntax--type {
color: #FFFFB6;
}
// div span
&.syntax--tag {
color: #96CBFE;
}
// href src alt
&.syntax--attribute {
color: #FF73FD;
}
}
// () [] {} => @
.syntax--punctuation {
color: #C5C8C6;
// . ->
&.syntax--accessor.syntax--member {
color: #EDEDED;
}
}
// "string"
.syntax--string {
color: #A8FF60;
// :immutable
&.syntax--immutable {
color: #A8FF60;
}
// ${variable} %().2f
&.syntax--part {
color: #00A0A0;
}
// /^reg[ex]?p/
&.syntax--regexp {
color: #A8FF60;
&.syntax--group {
color: #A8FF60;
background-color: @syntax-background-color;
}
// \g \"
.syntax--constant.syntax--character.syntax--escape {
color: #A8FF60;
// \n \W \d .
&.syntax--code {
color: #00A0A0;
}
}
// ^ $ \b ? + i
&.syntax--language {
color: #96CBFE;
}
// <variable> \1
&.syntax--variable {
color: #C5C8C6;
}
// ( ) [^ ] (?= ) | r" /
&.syntax--punctuation {
color: #E9C062;
}
}
}
// literal true nil
.syntax--constant {
color: #FF73FD;
// 4 1.3 Infinity
&.syntax--numeric {
color: #FF73FD;
}
// &lt; 'a'
&.syntax--character {
color: #A8FF60;
// \" \' \g \.
&.syntax--escape {
color: #A8FF60;
}
// \u2661 \n \t \W .
&.syntax--code {
color: #00A0A0;
}
}
}
// text
.syntax--text {
color: #C5C8C6;
}
// __formatted__
.syntax--markup {
// # Heading
&.syntax--heading {
color: #eee;
}
// - item
&.syntax--list {
color: #555;
}
// > quote
&.syntax--quote {
color: #555;
}
// `raw`
&.syntax--raw {
color: #aaa;
}
// url.com (path)
&.syntax--link {
color: #555;
}
// [alt] ![alt]
&.syntax--alt {
color: #ddd;
}
}
// /* comment */
.syntax--comment {
color: #8A8A8A;
// @param TODO NOTE
&.syntax--caption {
color: lighten(#8A8A8A, 6);
font-weight: bold;
}
// variable function type
&.syntax--term {
color: lighten(#8A8A8A, 9);
}
// { } / .
&.syntax--punctuation {
color: #8A8A8A;
font-weight: normal;
}
}
// 0invalid
.syntax--invalid:not(.syntax--punctuation) {
// §illegal
&.syntax--illegal {
color: #FD5FF1 !important;
background-color: rgba(86, 45, 86, 0.75) !important;
}
// obsolete()
&.syntax--deprecated {
color: #FD5FF1 !important;
text-decoration: underline !important;
}
}

View File

@ -0,0 +1,106 @@
.syntax--source.syntax--css {
.syntax--entity {
// function()
&.syntax--function {
color: #C5C8C6;
// url rgb
&.syntax--support {
color: #DAD085;
}
}
// .class :pseudo-class attribute
&.syntax--selector {
color: #FF73FD;
// div span
&.syntax--tag {
color: #96CBFE;
text-decoration: underline;
}
// #id
&.syntax--id {
color: #8B98AB;
}
// .class
&.syntax--class {
color: #62B1FE;
}
}
// property: constant
&.syntax--property {
// height position border
&.syntax--support {
color: #EDEDED;
}
}
// --variable
&.syntax--variable {
color: #C6C5FE;
}
// @keyframes keyframe
&.syntax--keyframe {
color: #C6C5FE;
}
}
// property: constant
.syntax--constant {
color: #C5C8C6;
// flex solid bold
&.syntax--support {
color: #F9EE98;
}
// 4 1.3
&.syntax--numeric {
color: #99CC99;
// px % cm hz
&.syntax--unit {
color: #99CC99;
}
}
// screen print
&.syntax--media {
color: #FFD2A7;
}
// #b294bb blue red
&.syntax--color {
color: #99CC99;
}
// from to 50%
&.syntax--offset {
color: #FFD2A7;
// %
&.syntax--unit {
color: #FFD2A7;
}
}
}
// . : :: # [] ()
.syntax--punctuation {
color: #C5C8C6;
// *
&.syntax--wildcard {
color: #96CBFE;
text-decoration: underline;
}
}
}

View File

@ -0,0 +1,18 @@
.syntax--source.syntax--html {
.syntax--punctuation {
// < />
&.syntax--tag {
color: #96CBFE;
}
}
.syntax--meta {
// <!doctype html>
&.syntax--doctype {
color: #8A8A8A;
}
}
}

View File

@ -4,4 +4,7 @@
@import "styles/syntax-variables.less";
@import 'styles/editor.less';
@import 'styles/syntax.less';
@import 'styles/syntax-legacy/_base.less';
@import "styles/syntax/base.less";
@import "styles/syntax/css.less";

View File

@ -0,0 +1,232 @@
/*
This defines styling rules for syntax classes.
See the naming conventions for a list of syntax classes:
https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions
When styling rules conflict:
- The last rule overrides previous rules.
- The rule with most classes and pseudo-classes overrides the last rule.
*/
// if for and del = &&
.syntax--keyword {
color: #222;
font-weight: bold;
// global let def class
&.syntax--storage {
color: #222;
font-weight: bold;
}
// int char float
&.syntax--type {
color: #458;
font-weight: normal;
}
// super
&.syntax--function {
color: #008080;
}
// this self
&.syntax--variable {
color: #008080;
}
}
// identifier
.syntax--entity {
color: #555;
// function(parameter)
&.syntax--parameter {
color: #555;
}
// self cls iota
&.syntax--support {
color: #008080;
}
// @entity.decorator
&.syntax--decorator:last-child {
color: #900;
}
// label:
&.syntax--label {
text-decoration: underline;
}
// function method
&.syntax--function {
color: #900;
}
// add
&.syntax--operator {
color: #900;
// %>% <=>
&.syntax--symbolic {
color: #555;
}
}
// String Class int rune list
&.syntax--type {
color: #458;
}
// div span
&.syntax--tag {
color: #008080;
}
// href src alt
&.syntax--attribute {
color: #458;
font-weight: bold;
}
}
// () [] {} => @
.syntax--punctuation {
// . ->
&.syntax--accessor.syntax--member {
color: #222;
font-weight: bold;
}
}
// "string"
.syntax--string {
color: #D14;
// :immutable
&.syntax--immutable {
color: #D14;
}
// {placeholder} %().2f
&.syntax--part {
color: #606aa1;
}
// ${ }
&.syntax--interpolation {
color: #222;
}
// /^reg[ex]?p/
&.syntax--regexp {
color: #D14;
// ^ $ \b ? + i
&.syntax--language {
color: #222;
}
// <variable> \1
&.syntax--variable {
color: #008080;
}
// ( ) [^ ] (?= ) | r" /
&.syntax--punctuation {
color: #222;
}
}
}
// literal 4 1.3
.syntax--constant {
color: #D14;
// &lt; 'a'
&.syntax--character {
color: #D14;
// \" \' \g \.
&.syntax--escape {
color: #D14;
}
// \u2661 \n \t \W .
&.syntax--code {
color: #606aa1;
}
}
// true false nil
&.syntax--language {
color: #D14;
}
}
// text
.syntax--text {
color: #555;
}
// __formatted__
.syntax--markup {
// # Heading
&.syntax--heading {
color: #111;
}
// 1. * -
&.syntax--list.syntax--punctuation {
color: #888;
}
// url.com (path)
&.syntax--link {
color: #888;
}
}
// /* comment */
.syntax--comment {
color: #999988;
font-style: italic;
// @param TODO NOTE
&.syntax--caption {
color: lighten(#999988, 6);
font-weight: bold;
}
// variable function type
&.syntax--term {
color: lighten(#999988, 9);
}
// { } / .
&.syntax--punctuation {
color: #999988;
font-weight: normal;
}
}
// 0invalid
.syntax--invalid:not(.syntax--punctuation) {
// §illegal
&.syntax--illegal {
color: #F8F8F0 !important;
background-color: #00A8C6 !important;
}
// obsolete()
&.syntax--deprecated {
color: #F8F8F0 !important;
background-color: #8FBE00 !important;
}
}

View File

@ -0,0 +1,108 @@
.syntax--source.syntax--css {
.syntax--entity {
// function()
&.syntax--function {
color: #555;
// url rgb
&.syntax--support {
color: #458;
}
}
// .class :pseudo-class attribute
&.syntax--selector {
color: #458;
font-weight: bold;
// div span
&.syntax--tag {
color: #008080;
font-weight: normal;
}
}
// href src alt
.syntax--attribute {
color: #458;
font-weight: bold;
}
// property: constant
&.syntax--property {
color: #555;
// height position border
&.syntax--support {
font-weight: bold;
color: #333;
}
}
// --variable
&.syntax--variable {
color: #008080;
}
// @keyframes keyframe
&.syntax--keyframe {
color: #606aa1;
}
}
// property: constant
.syntax--constant {
color: #555;
// flex solid bold
&.syntax--support {
color: #099;
}
// 4 1.3
&.syntax--numeric {
color: #099;
// px % cm hz
&.syntax--unit {
color: #445588;
font-weight: bold;
}
}
// screen print
&.syntax--media {
color: #099;
}
// #b294bb blue red
&.syntax--color {
color: #099;
}
// [attribute=attribute-value]
&.syntax--attribute-value {
color: #D14;
}
}
// . : :: #
.syntax--punctuation.syntax--selector {
color: #458;
font-weight: bold;
// *
&.syntax--wildcard {
color: #008080;
font-weight: normal;
}
// []
&.syntax--attribute {
color: #555;
font-weight: normal;
}
}
}

View File

@ -5,6 +5,9 @@
@import "styles/editor.less";
@import "styles/syntax/_base.less";
@import "styles/syntax/cs.less";
@import "styles/syntax/json.less";
@import "styles/syntax-legacy/_base.less";
@import "styles/syntax-legacy/cs.less";
@import "styles/syntax-legacy/json.less";
@import "styles/syntax/base.less";
@import "styles/syntax/css.less";

View File

@ -0,0 +1,293 @@
/*
This defines styling rules for syntax classes.
See the naming conventions for a list of syntax classes:
https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions
When styling rules conflict:
- The last rule overrides previous rules.
- The rule with most classes and pseudo-classes overrides the last rule.
*/
// if for return
.syntax--keyword {
color: @purple;
// global let def class
&.syntax--storage {
color: @purple;
}
// int char float
&.syntax--type {
color: @yellow;
}
// and del not
&.syntax--operator {
color: @purple;
}
// super
&.syntax--function {
color: @red;
}
// this self
&.syntax--variable {
color: @red;
}
// = + && | << ?
&.syntax--symbolic {
color: @syntax-text-color;
}
}
// identifier
.syntax--entity {
color: @syntax-text-color;
// self cls iota
&.syntax--support {
color: @red;
}
// @entity.decorator
&.syntax--decorator:last-child {
color: @blue;
}
// label:
&.syntax--label {
text-decoration: underline;
}
// function method
&.syntax--function {
color: @blue;
// len print
&.syntax--support {
color: @cyan;
}
}
// add
&.syntax--operator {
color: @blue;
// %>% <=>
&.syntax--symbolic {
color: @syntax-text-color;
}
}
// String Class int rune list
&.syntax--type {
color: @yellow;
}
// div span
&.syntax--tag {
color: @red;
}
// href src alt
&.syntax--attribute {
color: @orange;
}
}
// () [] {} => @
.syntax--punctuation {
color: @syntax-text-color;
// { } ~~~
&.syntax--embedded {
color: @brown;
}
}
// "string"
.syntax--string {
color: @green;
// :immutable
&.syntax--immutable {
color: @green;
}
// {placeholder} %().2f
&.syntax--part {
color: @cyan;
}
// ${ }
&.syntax--interpolation {
color: @brown;
}
// /^reg[ex]?p/
&.syntax--regexp {
color: @green;
// ^ $ \b ? + i
&.syntax--language {
color: @purple;
}
// <variable> \1
&.syntax--variable {
color: @blue;
}
// ( ) [^ ] (?= ) | r" /
&.syntax--punctuation {
color: @brown;
}
}
}
// literal 4 1.3 true nil
.syntax--constant {
color: @orange;
// &lt; 'a'
&.syntax--character {
color: @green;
// \" \' \g \.
&.syntax--escape {
color: @green;
}
// \u2661 \n \t \W .
&.syntax--code {
color: @cyan;
}
}
}
// text
.syntax--text {
color: @syntax-text-color;
}
// __formatted__
.syntax--markup {
// # Heading
&.syntax--heading {
color: @red;
}
// 1. * -
&.syntax--list.syntax--punctuation {
color: @red;
}
// **bold**
&.syntax--bold {
color: @orange;
font-weight: bold;
}
// *italic*
&.syntax--italic {
color: @purple;
font-style: italic;
}
// `raw`
&.syntax--raw {
color: @green;
}
// url.com (path)
&.syntax--link {
color: @blue;
}
// [alt] ![alt]
&.syntax--alt {
color: @cyan;
}
// {++ inserted ++}
&.syntax--inserted {
color: @green;
.syntax--punctuation {
color: @green;
}
}
// {== highlighted ==}
&.syntax--inserted {
color: @green;
.syntax--punctuation {
color: @green;
}
}
// {-- deleted --}
&.syntax--deleted {
color: @red;
.syntax--punctuation {
color: @red;
}
}
// {~~ from~>to ~~}
&.syntax--changed {
color: @purple;
.syntax--punctuation {
color: @purple;
}
}
// {>> commented <<}
&.syntax--commented {
color: @gray;
.syntax--punctuation {
color: @gray;
}
}
}
// /* comment */
.syntax--comment {
color: @gray;
// @param TODO NOTE
&.syntax--caption {
color: lighten(@gray, 3);
font-weight: bold;
}
// variable function type
&.syntax--term {
color: lighten(@gray, 7);
}
// { } / .
&.syntax--punctuation {
color: @gray;
font-weight: normal;
}
}
// 0invalid
.syntax--invalid:not(.syntax--punctuation) {
// §illegal
&.syntax--illegal {
background-color: @red;
color: @syntax-background-color;
}
}

View File

@ -0,0 +1,113 @@
.syntax--source.syntax--css {
.syntax--entity {
// function()
&.syntax--function {
color: @syntax-text-color;
// url rgb
&.syntax--support {
color: @cyan;
}
}
// .class :pseudo-class attribute
&.syntax--selector {
color: @orange;
// div span
&.syntax--tag {
color: @red;
}
// #id
&.syntax--id {
color: @blue;
}
}
// property: constant
&.syntax--property {
color: @syntax-text-color;
}
// --variable
&.syntax--variable {
color: @red;
}
// @keyframes keyframe
&.syntax--keyframe {
color: @red;
}
}
// property: constant
.syntax--constant {
color: @syntax-text-color;
// flex solid bold
&.syntax--support {
color: @orange;
}
// 3px 4em
&.syntax--numeric {
color: @orange;
}
// screen print
&.syntax--media {
color: @orange;
}
// from to 50%
&.syntax--offset {
color: @syntax-text-color;
// %
&.syntax--unit {
color: @syntax-text-color;
}
}
// #b294bb
&.syntax--color {
color: @cyan;
// blue red
&.syntax--support {
color: @orange;
}
}
// [attribute=attribute-value]
&.syntax--attribute-value {
color: @green;
}
}
.syntax--punctuation {
// . : ::
&.syntax--selector {
color: @orange;
// *
&.syntax--wildcard {
color: @red;
}
// #
&.syntax--id {
color: @blue;
}
// []
&.syntax--attribute {
color: @syntax-text-color;
}
}
}
}

View File

@ -5,6 +5,9 @@
@import "styles/editor.less";
@import "styles/syntax/_base.less";
@import "styles/syntax/cs.less";
@import "styles/syntax/json.less";
@import "styles/syntax-legacy/_base.less";
@import "styles/syntax-legacy/cs.less";
@import "styles/syntax-legacy/json.less";
@import "styles/syntax/base.less";
@import "styles/syntax/css.less";

View File

@ -0,0 +1,293 @@
/*
This defines styling rules for syntax classes.
See the naming conventions for a list of syntax classes:
https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions
When styling rules conflict:
- The last rule overrides previous rules.
- The rule with most classes and pseudo-classes overrides the last rule.
*/
// if for return
.syntax--keyword {
color: @purple;
// global let def class
&.syntax--storage {
color: @purple;
}
// int char float
&.syntax--type {
color: @yellow;
}
// and del not
&.syntax--operator {
color: @purple;
}
// super
&.syntax--function {
color: @red;
}
// this self
&.syntax--variable {
color: @red;
}
// = + && | << ?
&.syntax--symbolic {
color: @syntax-text-color;
}
}
// identifier
.syntax--entity {
color: @syntax-text-color;
// self cls iota
&.syntax--support {
color: @red;
}
// @entity.decorator
&.syntax--decorator:last-child {
color: @blue;
}
// label:
&.syntax--label {
text-decoration: underline;
}
// function method
&.syntax--function {
color: @blue;
// len print
&.syntax--support {
color: @cyan;
}
}
// add
&.syntax--operator {
color: @blue;
// %>% <=>
&.syntax--symbolic {
color: @syntax-text-color;
}
}
// String Class int rune list
&.syntax--type {
color: @yellow;
}
// div span
&.syntax--tag {
color: @red;
}
// href src alt
&.syntax--attribute {
color: @orange;
}
}
// () [] {} => @
.syntax--punctuation {
color: @syntax-text-color;
// { } ~~~
&.syntax--embedded {
color: @brown;
}
}
// "string"
.syntax--string {
color: @green;
// :immutable
&.syntax--immutable {
color: @green;
}
// {placeholder} %().2f
&.syntax--part {
color: @cyan;
}
// ${ }
&.syntax--interpolation {
color: @brown;
}
// /^reg[ex]?p/
&.syntax--regexp {
color: @green;
// ^ $ \b ? + i
&.syntax--language {
color: @purple;
}
// <variable> \1
&.syntax--variable {
color: @blue;
}
// ( ) [^ ] (?= ) | r" /
&.syntax--punctuation {
color: @brown;
}
}
}
// literal 4 1.3 true nil
.syntax--constant {
color: @orange;
// &lt; 'a'
&.syntax--character {
color: @green;
// \" \' \g \.
&.syntax--escape {
color: @green;
}
// \u2661 \n \t \W .
&.syntax--code {
color: @cyan;
}
}
}
// text
.syntax--text {
color: @syntax-text-color;
}
// __formatted__
.syntax--markup {
// # Heading
&.syntax--heading {
color: @red;
}
// 1. * -
&.syntax--list.syntax--punctuation {
color: @red;
}
// **bold**
&.syntax--bold {
color: @orange;
font-weight: bold;
}
// *italic*
&.syntax--italic {
color: @purple;
font-style: italic;
}
// `raw`
&.syntax--raw {
color: @green;
}
// url.com (path)
&.syntax--link {
color: @blue;
}
// [alt] ![alt]
&.syntax--alt {
color: @cyan;
}
// {++ inserted ++}
&.syntax--inserted {
color: @green;
.syntax--punctuation {
color: @green;
}
}
// {== highlighted ==}
&.syntax--inserted {
color: @green;
.syntax--punctuation {
color: @green;
}
}
// {-- deleted --}
&.syntax--deleted {
color: @red;
.syntax--punctuation {
color: @red;
}
}
// {~~ from~>to ~~}
&.syntax--changed {
color: @purple;
.syntax--punctuation {
color: @purple;
}
}
// {>> commented <<}
&.syntax--commented {
color: @gray;
.syntax--punctuation {
color: @gray;
}
}
}
// /* comment */
.syntax--comment {
color: @gray;
// @param TODO NOTE
&.syntax--caption {
color: lighten(@gray, 3);
font-weight: bold;
}
// variable function type
&.syntax--term {
color: lighten(@gray, 7);
}
// { } / .
&.syntax--punctuation {
color: @gray;
font-weight: normal;
}
}
// 0invalid
.syntax--invalid:not(.syntax--punctuation) {
// §illegal
&.syntax--illegal {
background-color: @red;
color: @syntax-background-color;
}
}

View File

@ -0,0 +1,113 @@
.syntax--source.syntax--css {
.syntax--entity {
// function()
&.syntax--function {
color: @syntax-text-color;
// url rgb
&.syntax--support {
color: @cyan;
}
}
// .class :pseudo-class attribute
&.syntax--selector {
color: @orange;
// div span
&.syntax--tag {
color: @red;
}
// #id
&.syntax--id {
color: @blue;
}
}
// property: constant
&.syntax--property {
color: @syntax-text-color;
}
// --variable
&.syntax--variable {
color: @red;
}
// @keyframes keyframe
&.syntax--keyframe {
color: @red;
}
}
// property: constant
.syntax--constant {
color: @syntax-text-color;
// flex solid bold
&.syntax--support {
color: @orange;
}
// 3px 4em
&.syntax--numeric {
color: @orange;
}
// screen print
&.syntax--media {
color: @orange;
}
// from to 50%
&.syntax--offset {
color: @syntax-text-color;
// %
&.syntax--unit {
color: @syntax-text-color;
}
}
// #b294bb
&.syntax--color {
color: @cyan;
// blue red
&.syntax--support {
color: @orange;
}
}
// [attribute=attribute-value]
&.syntax--attribute-value {
color: @green;
}
}
.syntax--punctuation {
// . : ::
&.syntax--selector {
color: @orange;
// *
&.syntax--wildcard {
color: @red;
}
// #
&.syntax--id {
color: @blue;
}
// []
&.syntax--attribute {
color: @syntax-text-color;
}
}
}
}

View File

@ -16,4 +16,4 @@ When people install core Atom packages as if they are community packages, it can
## I have more questions. Where can I ask them?
Please feel free to ask on [the official Atom message board](https://discuss.atom.io/c/support).
Please feel free to ask on [the official Atom message board](https://github.com/atom/atom/discussions).

View File

@ -1306,9 +1306,9 @@
}
},
"lodash": {
"version": "4.17.15",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true
},
"lodash._baseassign": {
@ -1572,9 +1572,9 @@
"dev": true
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
"path-to-regexp": {

View File

@ -6,9 +6,9 @@ import { CompositeDisposable } from 'atom';
import etch from 'etch';
import fs from 'fs-plus';
import Grim from 'grim';
import marked from 'marked';
import { marked } from 'marked';
import path from 'path';
import shell from 'shell';
import { shell } from 'electron';
export default class DeprecationCopView {
constructor({ uri }) {

View File

@ -12,7 +12,7 @@
"etch": "0.9.0",
"fs-plus": "^3.0.0",
"grim": "^2.0.1",
"marked": "^0.3.6",
"marked": "^4.0.10",
"underscore-plus": "^1.7.0"
},
"consumedServices": {

View File

@ -1,7 +1,9 @@
const SelectListView = require('atom-select-list');
const { repositoryForPath } = require('./helpers');
'use babel';
module.exports = class DiffListView {
import SelectListView from 'atom-select-list';
import repositoryForPath from './helpers';
export default class DiffListView {
constructor() {
this.selectListView = new SelectListView({
emptyMessage: 'No diffs in file',
@ -71,7 +73,7 @@ module.exports = class DiffListView {
this.cancel();
} else if (editor) {
this.editor = editor;
const repository = repositoryForPath(this.editor.getPath());
const repository = await repositoryForPath(this.editor.getPath());
let diffs = repository
? repository.getLineDiffs(this.editor.getPath(), this.editor.getText())
: [];
@ -86,4 +88,4 @@ module.exports = class DiffListView {
this.attach();
}
}
};
}

View File

@ -1,64 +1,157 @@
const { CompositeDisposable } = require('atom');
const { repositoryForPath } = require('./helpers');
'use babel';
import { CompositeDisposable } from 'atom';
import repositoryForPath from './helpers';
const MAX_BUFFER_LENGTH_TO_DIFF = 2 * 1024 * 1024;
module.exports = class GitDiffView {
constructor(editor) {
this.updateDiffs = this.updateDiffs.bind(this);
this.editor = editor;
/**
* @describe Handles per-editor event and repository subscriptions.
* @param editor {Atom.TextEditor} - The editor this view will manage.
*/
export default class GitDiffView {
constructor(editor, editorElement) {
// These are the only members guaranteed to exist.
this.subscriptions = new CompositeDisposable();
this.decorations = {};
this.markers = [];
}
this.editor = editor;
this.editorElement = editorElement;
this.repository = null;
this.markers = new Map();
start() {
const editorElement = this.editor.getElement();
// Assign `null` to all possible child vars here so the JS engine doesn't
// have to re-evaluate the microcode when we do eventually need them.
this.releaseChildren();
this.subscribeToRepository();
// I know this looks janky but it works. Class methods are available
// before the constructor is executed. It's a micro-opt above lambdas.
const subscribeToRepository = this.subscribeToRepository.bind(this);
// WARNING: This gets handed to requestAnimationFrame, so it must be bound.
this.updateDiffs = this.updateDiffs.bind(this);
subscribeToRepository();
this.subscriptions.add(
this.editor.onDidStopChanging(this.updateDiffs),
this.editor.onDidChangePath(this.updateDiffs),
atom.project.onDidChangePaths(() => this.subscribeToRepository()),
atom.commands.add(editorElement, 'git-diff:move-to-next-diff', () =>
this.moveToNextDiff()
),
atom.commands.add(editorElement, 'git-diff:move-to-previous-diff', () =>
this.moveToPreviousDiff()
),
atom.config.onDidChange('git-diff.showIconsInEditorGutter', () =>
this.updateIconDecoration()
),
atom.config.onDidChange('editor.showLineNumbers', () =>
this.updateIconDecoration()
),
editorElement.onDidAttach(() => this.updateIconDecoration()),
this.editor.onDidDestroy(() => {
this.cancelUpdate();
this.removeDecorations();
this.subscriptions.dispose();
})
atom.project.onDidChangePaths(subscribeToRepository)
);
}
this.updateIconDecoration();
this.scheduleUpdate();
/**
* @describe Handles tear down of destructables and subscriptions.
* Does not handle release of memory. This method should only be called
* just before this object is freed, and should only tear down the main
* object components that are guarunteed to exist at all times.
*/
destroy() {
this.subscriptions.dispose();
this.destroyChildren();
this.markers.clear();
}
/**
* @describe Destroys this objects children (non-freeing), it's intended
* to be an ease-of use function for maintaing this object. This method
* should only tear down objects that are selectively allocated upon
* repository discovery.
*
* Example: this.diffs only exists when we have a repository.
*/
destroyChildren() {
if (this._animationId) cancelAnimationFrame(this._animationId);
if (this.diffs)
for (const diff of this.diffs) this.markers.get(diff).destroy();
}
/**
* @describe The memory releasing complement function of `destroyChildren`.
* frees the memory allocated at all child object storage locations
* when there is no repository.
*/
releaseChildren() {
this.diffs = null;
this._repoSubs = null;
this._animationId = null;
this.editorPath = null;
this.buffer = null;
}
/**
* @describe handles all subscriptions based on the repository in focus
*/
async subscribeToRepository() {
if (this._repoSubs !== null) {
this._repoSubs.dispose();
this.subscriptions.remove(this._repoSubs);
}
// Don't cache the path unless we know we need it.
let editorPath = this.editor.getPath();
this.repository = await repositoryForPath(editorPath);
if (this.repository !== null) {
this.editorPath = editorPath;
this.buffer = this.editor.getBuffer();
const subscribeToRepository = this.subscribeToRepository.bind(this);
const updateIconDecoration = this.updateIconDecoration.bind(this);
const scheduleUpdate = this.scheduleUpdate.bind(this);
this._repoSubs = new CompositeDisposable(
this.repository.onDidDestroy(subscribeToRepository),
this.repository.onDidChangeStatuses(scheduleUpdate),
this.repository.onDidChangeStatus(changedPath => {
if (changedPath === this.editorPath) scheduleUpdate();
}),
this.editor.onDidStopChanging(scheduleUpdate),
this.editor.onDidChangePath(() => {
this.editorPath = this.editor.getPath();
this.buffer = this.editor.getBuffer();
scheduleUpdate();
}),
atom.commands.add(
this.editorElement,
'git-diff:move-to-next-diff',
this.moveToNextDiff.bind(this)
),
atom.commands.add(
this.editorElement,
'git-diff:move-to-previous-diff',
this.moveToPreviousDiff.bind(this)
),
atom.config.onDidChange(
'git-diff.showIconsInEditorGutter',
updateIconDecoration
),
atom.config.onDidChange('editor.showLineNumbers', updateIconDecoration),
this.editorElement.onDidAttach(updateIconDecoration)
);
// Every time the repo is changed, the editor needs to be reinitialized.
this.subscriptions.add(this._repoSubs);
updateIconDecoration();
scheduleUpdate();
} else {
this.destroyChildren();
this.releaseChildren();
}
}
moveToNextDiff() {
const cursorLineNumber = this.editor.getCursorBufferPosition().row + 1;
let nextDiffLineNumber = null;
let firstDiffLineNumber = null;
if (this.diffs) {
for (const { newStart } of this.diffs) {
if (newStart > cursorLineNumber) {
if (nextDiffLineNumber == null) nextDiffLineNumber = newStart - 1;
nextDiffLineNumber = Math.min(newStart - 1, nextDiffLineNumber);
}
if (firstDiffLineNumber == null) firstDiffLineNumber = newStart - 1;
firstDiffLineNumber = Math.min(newStart - 1, firstDiffLineNumber);
for (const { newStart } of this.diffs) {
if (newStart > cursorLineNumber) {
if (nextDiffLineNumber == null) nextDiffLineNumber = newStart - 1;
nextDiffLineNumber = Math.min(newStart - 1, nextDiffLineNumber);
}
if (firstDiffLineNumber == null) firstDiffLineNumber = newStart - 1;
firstDiffLineNumber = Math.min(newStart - 1, firstDiffLineNumber);
}
// Wrap around to the first diff in the file
@ -72,8 +165,30 @@ module.exports = class GitDiffView {
this.moveToLineNumber(nextDiffLineNumber);
}
moveToPreviousDiff() {
const cursorLineNumber = this.editor.getCursorBufferPosition().row + 1;
let previousDiffLineNumber = null;
let lastDiffLineNumber = null;
for (const { newStart } of this.diffs) {
if (newStart < cursorLineNumber) {
previousDiffLineNumber = Math.max(newStart - 1, previousDiffLineNumber);
}
lastDiffLineNumber = Math.max(newStart - 1, lastDiffLineNumber);
}
// Wrap around to the last diff in the file
if (
atom.config.get('git-diff.wrapAroundOnMoveToDiff') &&
previousDiffLineNumber === null
) {
previousDiffLineNumber = lastDiffLineNumber;
}
this.moveToLineNumber(previousDiffLineNumber);
}
updateIconDecoration() {
const gutter = this.editor.getElement().querySelector('.gutter');
const gutter = this.editorElement.querySelector('.gutter');
if (gutter) {
if (
atom.config.get('editor.showLineNumbers') &&
@ -86,108 +201,67 @@ module.exports = class GitDiffView {
}
}
moveToPreviousDiff() {
const cursorLineNumber = this.editor.getCursorBufferPosition().row + 1;
let previousDiffLineNumber = -1;
let lastDiffLineNumber = -1;
if (this.diffs) {
for (const { newStart } of this.diffs) {
if (newStart < cursorLineNumber) {
previousDiffLineNumber = Math.max(
newStart - 1,
previousDiffLineNumber
);
}
lastDiffLineNumber = Math.max(newStart - 1, lastDiffLineNumber);
}
}
// Wrap around to the last diff in the file
if (
atom.config.get('git-diff.wrapAroundOnMoveToDiff') &&
previousDiffLineNumber === -1
) {
previousDiffLineNumber = lastDiffLineNumber;
}
this.moveToLineNumber(previousDiffLineNumber);
}
moveToLineNumber(lineNumber) {
if (lineNumber != null && lineNumber >= 0) {
if (lineNumber !== null) {
this.editor.setCursorBufferPosition([lineNumber, 0]);
this.editor.moveToFirstCharacterOfLine();
}
}
subscribeToRepository() {
this.repository = repositoryForPath(this.editor.getPath());
if (this.repository) {
this.subscriptions.add(
this.repository.onDidChangeStatuses(() => {
this.scheduleUpdate();
})
);
this.subscriptions.add(
this.repository.onDidChangeStatus(changedPath => {
if (changedPath === this.editor.getPath()) this.scheduleUpdate();
})
);
}
}
cancelUpdate() {
clearImmediate(this.immediateId);
}
scheduleUpdate() {
this.cancelUpdate();
this.immediateId = setImmediate(this.updateDiffs);
// Use Chromium native requestAnimationFrame because it yields
// to the browser, is standard and doesn't involve extra JS overhead.
if (this._animationId) cancelAnimationFrame(this._animationId);
this._animationId = requestAnimationFrame(this.updateDiffs);
}
/**
* @describe Uses text markers in the target editor to visualize
* git modifications, additions, and deletions. The current algorithm
* just redraws the markers each call.
*/
updateDiffs() {
if (this.editor.isDestroyed()) return;
this.removeDecorations();
const path = this.editor && this.editor.getPath();
if (
path &&
this.editor.getBuffer().getLength() < MAX_BUFFER_LENGTH_TO_DIFF
) {
this.diffs =
this.repository &&
this.repository.getLineDiffs(path, this.editor.getText());
if (this.diffs) this.addDecorations(this.diffs);
}
}
if (this.buffer.getLength() < MAX_BUFFER_LENGTH_TO_DIFF) {
// Before we redraw the diffs, tear down the old markers.
if (this.diffs)
for (const diff of this.diffs) this.markers.get(diff).destroy();
addDecorations(diffs) {
for (const { newStart, oldLines, newLines } of diffs) {
const startRow = newStart - 1;
const endRow = newStart + newLines - 1;
if (oldLines === 0 && newLines > 0) {
this.markRange(startRow, endRow, 'git-line-added');
} else if (newLines === 0 && oldLines > 0) {
if (startRow < 0) {
this.markRange(0, 0, 'git-previous-line-removed');
this.markers.clear();
const text = this.buffer.getText();
this.diffs = this.repository.getLineDiffs(this.editorPath, text);
this.diffs = this.diffs || []; // Sanitize type to array.
for (const diff of this.diffs) {
const { newStart, oldLines, newLines } = diff;
const startRow = newStart - 1;
const endRow = newStart + newLines - 1;
let mark;
if (oldLines === 0 && newLines > 0) {
mark = this.markRange(startRow, endRow, 'git-line-added');
} else if (newLines === 0 && oldLines > 0) {
if (startRow < 0) {
mark = this.markRange(0, 0, 'git-previous-line-removed');
} else {
mark = this.markRange(startRow, startRow, 'git-line-removed');
}
} else {
this.markRange(startRow, startRow, 'git-line-removed');
mark = this.markRange(startRow, endRow, 'git-line-modified');
}
} else {
this.markRange(startRow, endRow, 'git-line-modified');
this.markers.set(diff, mark);
}
}
}
removeDecorations() {
for (let marker of this.markers) marker.destroy();
this.markers = [];
}
markRange(startRow, endRow, klass) {
const marker = this.editor.markBufferRange([[startRow, 0], [endRow, 0]], {
invalidate: 'never'
});
this.editor.decorateMarker(marker, { type: 'line-number', class: klass });
this.markers.push(marker);
return marker;
}
};
}

View File

@ -1,11 +1,9 @@
exports.repositoryForPath = function(goalPath) {
const directories = atom.project.getDirectories();
const repositories = atom.project.getRepositories();
for (let i = 0; i < directories.length; i++) {
const directory = directories[i];
if (goalPath === directory.getPath() || directory.contains(goalPath)) {
return repositories[i];
}
'use babel';
import { Directory } from 'atom';
export default async function(goalPath) {
if (goalPath) {
return atom.project.repositoryForDirectory(new Directory(goalPath));
}
return null;
};
}

View File

@ -1,32 +1,52 @@
const GitDiffView = require('./git-diff-view');
const DiffListView = require('./diff-list-view');
'use babel';
import { CompositeDisposable } from 'atom';
import GitDiffView from './git-diff-view';
import DiffListView from './diff-list-view';
let diffListView = null;
let diffViews = new Set();
let subscriptions = null;
module.exports = {
activate() {
const watchedEditors = new WeakSet();
export default {
activate(state) {
subscriptions = new CompositeDisposable();
atom.workspace.observeTextEditors(editor => {
if (watchedEditors.has(editor)) return;
subscriptions.add(
atom.workspace.observeTextEditors(editor => {
const editorElement = atom.views.getView(editor);
const diffView = new GitDiffView(editor, editorElement);
new GitDiffView(editor).start();
atom.commands.add(
atom.views.getView(editor),
'git-diff:toggle-diff-list',
() => {
if (diffListView == null) diffListView = new DiffListView();
diffListView.toggle();
}
);
diffViews.add(diffView);
watchedEditors.add(editor);
editor.onDidDestroy(() => watchedEditors.delete(editor));
});
const listViewCommand = 'git-diff:toggle-diff-list';
const editorSubs = new CompositeDisposable(
atom.commands.add(editorElement, listViewCommand, () => {
if (diffListView == null) diffListView = new DiffListView();
diffListView.toggle();
}),
editor.onDidDestroy(() => {
diffView.destroy();
diffViews.delete(diffView);
editorSubs.dispose();
subscriptions.remove(editorSubs);
})
);
subscriptions.add(editorSubs);
})
);
},
deactivate() {
if (diffListView) diffListView.destroy();
diffListView = null;
for (const diffView of diffViews) diffView.destroy();
diffViews.clear();
subscriptions.dispose();
subscriptions = null;
}
};

View File

@ -9,27 +9,11 @@
"atom": "*"
},
"dependencies": {
"atom-select-list": "^0.7.0",
"fs-plus": "^3.0.0",
"temp": "~0.8.1"
"atom-select-list": "^0.7.0"
},
"devDependencies": {
"standard": "^11.0.0"
},
"standard": {
"ignore": [
"spec/fixtures/working-dir/sample.js"
],
"env": {
"atomtest": true,
"browser": true,
"jasmine": true,
"node": true
},
"globals": [
"atom",
"snapshotResult"
]
"fs-plus": "^3.0.0",
"temp": "~0.8.1"
},
"configSchema": {
"showIconsInEditorGutter": {

View File

@ -1,6 +1,6 @@
const path = require('path');
const fs = require('fs-plus');
const temp = require('temp');
const temp = require('temp').track();
describe('git-diff:toggle-diff-list', () => {
let diffListView, editor;

View File

@ -1,12 +1,17 @@
const path = require('path');
const fs = require('fs-plus');
const temp = require('temp');
const temp = require('temp').track();
describe('GitDiff package', () => {
let editor, editorElement, projectPath;
let editor, editorElement, projectPath, screenUpdates;
beforeEach(() => {
spyOn(window, 'setImmediate').andCallFake(fn => fn());
screenUpdates = 0;
spyOn(window, 'requestAnimationFrame').andCallFake(fn => {
fn();
screenUpdates++;
});
spyOn(window, 'cancelAnimationFrame').andCallFake(i => null);
projectPath = temp.mkdirSync('git-diff-spec-');
const otherPath = temp.mkdirSync('some-other-path-');
@ -20,16 +25,26 @@ describe('GitDiff package', () => {
jasmine.attachToDOM(atom.workspace.getElement());
waitsForPromise(() =>
atom.workspace.open(path.join(projectPath, 'sample.js'))
);
waitsForPromise(async () => {
await atom.workspace.open(path.join(projectPath, 'sample.js'));
await atom.packages.activatePackage('git-diff');
});
runs(() => {
editor = atom.workspace.getActiveTextEditor();
editorElement = editor.getElement();
editorElement = atom.views.getView(editor);
});
});
waitsForPromise(() => atom.packages.activatePackage('git-diff'));
afterEach(() => {
temp.cleanup();
});
describe('when the editor has no changes', () => {
it("doesn't mark the editor", () => {
waitsFor(() => screenUpdates > 0);
runs(() => expect(editor.getMarkers().length).toBe(0));
});
});
describe('when the editor has modified lines', () => {
@ -39,13 +54,17 @@ describe('GitDiff package', () => {
);
editor.insertText('a');
advanceClock(editor.getBuffer().stoppedChangingDelay);
expect(editorElement.querySelectorAll('.git-line-modified').length).toBe(
1
);
expect(editorElement.querySelector('.git-line-modified')).toHaveData(
'buffer-row',
0
);
waitsFor(() => editor.getMarkers().length > 0);
runs(() => {
expect(
editorElement.querySelectorAll('.git-line-modified').length
).toBe(1);
expect(editorElement.querySelector('.git-line-modified')).toHaveData(
'buffer-row',
0
);
});
});
});
@ -56,11 +75,16 @@ describe('GitDiff package', () => {
editor.insertNewline();
editor.insertText('a');
advanceClock(editor.getBuffer().stoppedChangingDelay);
expect(editorElement.querySelectorAll('.git-line-added').length).toBe(1);
expect(editorElement.querySelector('.git-line-added')).toHaveData(
'buffer-row',
1
);
waitsFor(() => editor.getMarkers().length > 0);
runs(() => {
expect(editorElement.querySelectorAll('.git-line-added').length).toBe(
1
);
expect(editorElement.querySelector('.git-line-added')).toHaveData(
'buffer-row',
1
);
});
});
});
@ -70,13 +94,16 @@ describe('GitDiff package', () => {
editor.setCursorBufferPosition([5]);
editor.deleteLine();
advanceClock(editor.getBuffer().stoppedChangingDelay);
expect(editorElement.querySelectorAll('.git-line-removed').length).toBe(
1
);
expect(editorElement.querySelector('.git-line-removed')).toHaveData(
'buffer-row',
4
);
waitsFor(() => editor.getMarkers().length > 0);
runs(() => {
expect(editorElement.querySelectorAll('.git-line-removed').length).toBe(
1
);
expect(editorElement.querySelector('.git-line-removed')).toHaveData(
'buffer-row',
4
);
});
});
});
@ -86,12 +113,15 @@ describe('GitDiff package', () => {
editor.setCursorBufferPosition([0, 0]);
editor.deleteLine();
advanceClock(editor.getBuffer().stoppedChangingDelay);
expect(
editorElement.querySelectorAll('.git-previous-line-removed').length
).toBe(1);
expect(
editorElement.querySelector('.git-previous-line-removed')
).toHaveData('buffer-row', 0);
waitsFor(() => editor.getMarkers().length > 0);
runs(() => {
expect(
editorElement.querySelectorAll('.git-previous-line-removed').length
).toBe(1);
expect(
editorElement.querySelector('.git-previous-line-removed')
).toHaveData('buffer-row', 0);
});
});
});
@ -102,14 +132,24 @@ describe('GitDiff package', () => {
);
editor.insertText('a');
advanceClock(editor.getBuffer().stoppedChangingDelay);
expect(editorElement.querySelectorAll('.git-line-modified').length).toBe(
1
waitsFor(
() => editorElement.querySelectorAll('.git-line-modified').length > 0
);
editor.backspace();
advanceClock(editor.getBuffer().stoppedChangingDelay);
expect(editorElement.querySelectorAll('.git-line-modified').length).toBe(
0
runs(() => {
expect(
editorElement.querySelectorAll('.git-line-modified').length
).toBe(1);
editor.backspace();
advanceClock(editor.getBuffer().stoppedChangingDelay);
});
waitsFor(
() => editorElement.querySelectorAll('.git-line-modified').length < 1
);
runs(() => {
expect(
editorElement.querySelectorAll('.git-line-modified').length
).toBe(0);
});
});
});
@ -119,21 +159,17 @@ describe('GitDiff package', () => {
path.join(projectPath, 'sample.txt'),
'Some different text.'
);
let nextTick = false;
waitsForPromise(() =>
atom.workspace.open(path.join(projectPath, 'sample.txt'))
);
runs(() => {
editorElement = atom.workspace.getActiveTextEditor().getElement();
editor = atom.workspace.getActiveTextEditor();
editorElement = editor.getElement();
});
setImmediate(() => {
nextTick = true;
});
waitsFor(() => nextTick);
waitsFor(() => editor.getMarkers().length > 0);
runs(() => {
expect(
@ -152,39 +188,49 @@ describe('GitDiff package', () => {
editor.deleteLine();
atom.project.setPaths([temp.mkdirSync('no-repository')]);
advanceClock(editor.getBuffer().stoppedChangingDelay);
waitsFor(() => editor.getMarkers().length === 0);
runs(() => {
expect(editor.getMarkers().length).toBe(0);
});
});
});
describe('move-to-next-diff/move-to-previous-diff events', () => {
it('moves the cursor to first character of the next/previous diff line', () => {
editor.insertText('a');
editor.setCursorBufferPosition([5]);
editor.deleteLine();
advanceClock(editor.getBuffer().stoppedChangingDelay);
waitsFor(() => editor.getMarkers().length > 0);
runs(() => {
editor.setCursorBufferPosition([5]);
editor.deleteLine();
advanceClock(editor.getBuffer().stoppedChangingDelay);
editor.setCursorBufferPosition([0]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff');
expect(editor.getCursorBufferPosition()).toEqual([4, 4]);
editor.setCursorBufferPosition([0]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff');
expect(editor.getCursorBufferPosition()).toEqual([4, 4]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-previous-diff');
expect(editor.getCursorBufferPosition()).toEqual([0, 0]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-previous-diff');
expect(editor.getCursorBufferPosition()).toEqual([0, 0]);
});
});
it('wraps around to the first/last diff in the file', () => {
editor.insertText('a');
editor.setCursorBufferPosition([5]);
editor.deleteLine();
advanceClock(editor.getBuffer().stoppedChangingDelay);
waitsFor(() => editor.getMarkers().length > 0);
runs(() => {
editor.setCursorBufferPosition([5]);
editor.deleteLine();
advanceClock(editor.getBuffer().stoppedChangingDelay);
editor.setCursorBufferPosition([0]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff');
expect(editor.getCursorBufferPosition()).toEqual([4, 4]);
editor.setCursorBufferPosition([0]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff');
expect(editor.getCursorBufferPosition().toArray()).toEqual([4, 4]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff');
expect(editor.getCursorBufferPosition()).toEqual([0, 0]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff');
expect(editor.getCursorBufferPosition().toArray()).toEqual([0, 0]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-previous-diff');
expect(editor.getCursorBufferPosition()).toEqual([4, 4]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-previous-diff');
expect(editor.getCursorBufferPosition().toArray()).toEqual([4, 4]);
});
});
describe('when the wrapAroundOnMoveToDiff config option is false', () => {
@ -197,19 +243,28 @@ describe('GitDiff package', () => {
editor.setCursorBufferPosition([5]);
editor.deleteLine();
advanceClock(editor.getBuffer().stoppedChangingDelay);
waitsFor(() => editor.getMarkers().length > 0);
editor.setCursorBufferPosition([0]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff');
expect(editor.getCursorBufferPosition()).toEqual([4, 4]);
runs(() => {
editor.setCursorBufferPosition([0]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff');
expect(editor.getCursorBufferPosition()).toEqual([4, 4]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff');
expect(editor.getCursorBufferPosition()).toEqual([4, 4]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-next-diff');
expect(editor.getCursorBufferPosition()).toEqual([4, 4]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-previous-diff');
expect(editor.getCursorBufferPosition()).toEqual([0, 0]);
atom.commands.dispatch(
editorElement,
'git-diff:move-to-previous-diff'
);
expect(editor.getCursorBufferPosition()).toEqual([0, 0]);
atom.commands.dispatch(editorElement, 'git-diff:move-to-previous-diff');
expect(editor.getCursorBufferPosition()).toEqual([0, 0]);
atom.commands.dispatch(
editorElement,
'git-diff:move-to-previous-diff'
);
expect(editor.getCursorBufferPosition()).toEqual([0, 0]);
});
});
});
});
@ -219,28 +274,40 @@ describe('GitDiff package', () => {
atom.config.set('git-diff.showIconsInEditorGutter', true);
});
it('the gutter has a git-diff-icon class', () =>
expect(editorElement.querySelector('.gutter')).toHaveClass(
'git-diff-icon'
));
it('the gutter has a git-diff-icon class', () => {
waitsFor(() => screenUpdates > 0);
runs(() => {
expect(editorElement.querySelector('.gutter')).toHaveClass(
'git-diff-icon'
);
});
});
it('keeps the git-diff-icon class when editor.showLineNumbers is toggled', () => {
atom.config.set('editor.showLineNumbers', false);
expect(editorElement.querySelector('.gutter')).not.toHaveClass(
'git-diff-icon'
);
waitsFor(() => screenUpdates > 0);
atom.config.set('editor.showLineNumbers', true);
expect(editorElement.querySelector('.gutter')).toHaveClass(
'git-diff-icon'
);
runs(() => {
atom.config.set('editor.showLineNumbers', false);
expect(editorElement.querySelector('.gutter')).not.toHaveClass(
'git-diff-icon'
);
atom.config.set('editor.showLineNumbers', true);
expect(editorElement.querySelector('.gutter')).toHaveClass(
'git-diff-icon'
);
});
});
it('removes the git-diff-icon class when the showIconsInEditorGutter config option set to false', () => {
atom.config.set('git-diff.showIconsInEditorGutter', false);
expect(editorElement.querySelector('.gutter')).not.toHaveClass(
'git-diff-icon'
);
waitsFor(() => screenUpdates > 0);
runs(() => {
atom.config.set('git-diff.showIconsInEditorGutter', false);
expect(editorElement.querySelector('.gutter')).not.toHaveClass(
'git-diff-icon'
);
});
});
});
});

View File

@ -0,0 +1,75 @@
const path = require('path');
const fs = require('fs-plus');
const temp = require('temp').track();
describe('GitDiff when targeting nested repository', () => {
let editor, editorElement, projectPath, screenUpdates;
beforeEach(() => {
screenUpdates = 0;
spyOn(window, 'requestAnimationFrame').andCallFake(fn => {
fn();
screenUpdates++;
});
spyOn(window, 'cancelAnimationFrame').andCallFake(i => null);
projectPath = temp.mkdirSync('git-diff-spec-');
fs.copySync(path.join(__dirname, 'fixtures', 'working-dir'), projectPath);
fs.moveSync(
path.join(projectPath, 'git.git'),
path.join(projectPath, '.git')
);
// The nested repo doesn't need to be managed by the temp module because
// it's a part of our test environment.
const nestedPath = path.join(projectPath, 'nested-repository');
// Initialize the repository contents.
fs.copySync(path.join(__dirname, 'fixtures', 'working-dir'), nestedPath);
fs.moveSync(
path.join(nestedPath, 'git.git'),
path.join(nestedPath, '.git')
);
atom.project.setPaths([projectPath]);
jasmine.attachToDOM(atom.workspace.getElement());
waitsForPromise(async () => {
await atom.workspace.open(path.join(nestedPath, 'sample.js'));
await atom.packages.activatePackage('git-diff');
});
runs(() => {
editor = atom.workspace.getActiveTextEditor();
editorElement = atom.views.getView(editor);
});
});
afterEach(() => {
temp.cleanup();
});
describe('When git-diff targets a file in a nested git-repository', () => {
/***
* Non-hack regression prevention for nested repositories. If we know
* that our project path contains two repositories, we can ensure that
* git-diff is targeting the correct one by creating an artificial change
* in the ancestor repository, which is percieved differently within the
* child. In this case, creating a new file will not generate markers in
* the ancestor repo, even if there are changes; but changes will be
* marked within the child repo. So all we have to do is check if
* markers exist and we know we're targeting the proper repository,
* If no markers exist, we're targeting an ancestor repo.
*/
it('uses the innermost repository', () => {
editor.insertText('a');
waitsFor(() => screenUpdates > 0);
runs(() => {
expect(
editorElement.querySelectorAll('.git-line-modified').length
).toBe(1);
});
});
});
});

View File

@ -0,0 +1,48 @@
const path = require('path');
const fs = require('fs-plus');
const temp = require('temp').track();
const commands = [
'git-diff:toggle-diff-list',
'git-diff:move-to-next-diff',
'git-diff:move-to-previous-diff'
];
describe('git-diff', () => {
let editor, element;
beforeEach(() => {
const projectPath = temp.mkdirSync('git-diff-spec-');
fs.copySync(path.join(__dirname, 'fixtures', 'working-dir'), projectPath);
fs.moveSync(
path.join(projectPath, 'git.git'),
path.join(projectPath, '.git')
);
atom.project.setPaths([projectPath]);
jasmine.attachToDOM(atom.workspace.getElement());
waitsForPromise(() => atom.workspace.open('sample.js'));
runs(() => {
editor = atom.workspace.getActiveTextEditor();
element = atom.views.getView(editor);
});
});
describe('When the module is deactivated', () => {
it('removes all registered command hooks after deactivation.', () => {
waitsForPromise(() => atom.packages.activatePackage('git-diff'));
waitsForPromise(() => atom.packages.deactivatePackage('git-diff'));
runs(() => {
// NOTE: don't use enable and disable from the Public API.
expect(atom.packages.isPackageActive('git-diff')).toBe(false);
atom.commands
.findCommands({ target: element })
.filter(({ name }) => commands.includes(name))
.forEach(command => expect(commands).not.toContain(command.name));
});
});
});
});

View File

@ -77,7 +77,7 @@ describe('GoToLine', () => {
const rowsPerPage = editor.getRowsPerPage();
const currentRow = editor.getCursorBufferPosition().row;
expect(editor.getFirstVisibleScreenRow()).toBe(
currentRow - Math.ceil(rowsPerPage / 2)
Math.ceil(currentRow - rowsPerPage / 2)
);
expect(editor.getLastVisibleScreenRow()).toBe(
currentRow + Math.floor(rowsPerPage / 2)

View File

@ -11,7 +11,7 @@
"repository": "https://github.com/atom/atom",
"license": "MIT",
"dependencies": {
"tree-sitter-rust": "^0.16.0"
"tree-sitter-rust": "^0.17.0"
},
"engines": {
"atom": ">=1.0.0 <2.0.0"

View File

@ -2,7 +2,7 @@
import _ from 'underscore-plus';
import { CompositeDisposable, Disposable } from 'atom';
import SelectListView from 'atom-select-list';
import { Selector } from './selector';
import StatusBarItem from './status-bar-item';
import helpers from './helpers';
@ -16,53 +16,28 @@ const LFRegExp = /(\A|[^\r])\n/g;
const CRLFRegExp = /\r\n/g;
let disposables = null;
let modalPanel = null;
let lineEndingListView = null;
export function activate() {
disposables = new CompositeDisposable();
let selectorDisposable;
let selector;
disposables.add(
atom.commands.add('atom-text-editor', {
'line-ending-selector:show': event => {
if (!modalPanel) {
lineEndingListView = new SelectListView({
items: [
{ name: 'LF', value: '\n' },
{ name: 'CRLF', value: '\r\n' }
],
filterKeyForItem: lineEnding => lineEnding.name,
didConfirmSelection: lineEnding => {
setLineEnding(
atom.workspace.getActiveTextEditor(),
lineEnding.value
);
modalPanel.hide();
},
didCancelSelection: () => {
modalPanel.hide();
},
elementForItem: lineEnding => {
const element = document.createElement('li');
element.textContent = lineEnding.name;
return element;
}
});
modalPanel = atom.workspace.addModalPanel({
item: lineEndingListView
});
disposables.add(
new Disposable(() => {
lineEndingListView.destroy();
modalPanel.destroy();
modalPanel = null;
})
);
'line-ending-selector:show': () => {
// Initiating Selector object - called only once when `line-ending-selector:show` is called
if (!selectorDisposable) {
// make a Selector object
selector = new Selector([
{ name: 'LF', value: '\n' },
{ name: 'CRLF', value: '\r\n' }
]);
// Add disposable for selector
selectorDisposable = new Disposable(() => selector.dispose());
disposables.add(selectorDisposable);
}
lineEndingListView.reset();
modalPanel.show();
lineEndingListView.focus();
selector.show();
},
'line-ending-selector:convert-to-LF': event => {
@ -187,7 +162,7 @@ function getLineEndings(buffer) {
}
}
function setLineEnding(item, lineEnding) {
export function setLineEnding(item, lineEnding) {
if (item && item.getBuffer) {
let buffer = item.getBuffer();
buffer.setPreferredLineEnding(lineEnding);

View File

@ -0,0 +1,77 @@
'use babel';
import SelectListView from 'atom-select-list';
import { TextEditor } from 'atom';
import { setLineEnding } from './main';
export class Selector {
lineEndingListView;
modalPanel;
previousActivePane;
// Make a selector object (should be called once)
constructor(selectorItems) {
// Defining a SelectListView with methods - https://github.com/atom/atom-select-list
this.lineEndingListView = new SelectListView({
// an array containing the objects you want to show in the select list
items: selectorItems,
// called whenever an item needs to be displayed.
elementForItem: lineEnding => {
const element = document.createElement('li');
element.textContent = lineEnding.name;
return element;
},
// called to retrieve a string property on each item and that will be used to filter them.
filterKeyForItem: lineEnding => {
return lineEnding.name;
},
// called when the user clicks or presses Enter on an item. // use `=>` for `this`
didConfirmSelection: lineEnding => {
const editor = atom.workspace.getActiveTextEditor();
if (editor instanceof TextEditor) {
setLineEnding(editor, lineEnding.value);
}
this.hide();
},
// called when the user presses Esc or the list loses focus. // use `=>` for `this`
didCancelSelection: () => {
this.hide();
}
});
// Adding SelectListView to panel
this.modalPanel = atom.workspace.addModalPanel({
item: this.lineEndingListView
});
}
// Show a selector object
show() {
this.previousActivePane = atom.workspace.getActivePane();
// Show selector
this.lineEndingListView.reset();
this.modalPanel.show();
this.lineEndingListView.focus();
}
// Hide a selector
hide() {
// hide modal panel
this.modalPanel.hide();
// focus on the previous active pane
this.previousActivePane.activate();
}
// Dispose selector
dispose() {
this.lineEndingListView.destroy();
this.modalPanel.destroy();
this.modalPanel = null;
}
}

View File

@ -5,20 +5,23 @@
@import "styles/editor.less";
@import "styles/syntax/_base.less";
@import "styles/syntax/c.less";
@import "styles/syntax/cpp.less";
@import "styles/syntax/cs.less";
@import "styles/syntax-legacy/_base.less";
// @import "styles/syntax-legacy/c.less";
// @import "styles/syntax-legacy/cpp.less";
@import "styles/syntax-legacy/cs.less";
@import "styles/syntax-legacy/css.less";
@import "styles/syntax-legacy/elixir.less";
@import "styles/syntax-legacy/gfm.less";
// @import "styles/syntax-legacy/go.less";
@import "styles/syntax-legacy/ini.less";
@import "styles/syntax-legacy/java.less";
// @import "styles/syntax-legacy/javascript.less";
@import "styles/syntax-legacy/typescript.less";
@import "styles/syntax-legacy/json.less";
@import "styles/syntax-legacy/ng.less";
// @import "styles/syntax-legacy/ruby.less";
@import "styles/syntax-legacy/php.less";
// @import "styles/syntax-legacy/python.less";
@import "styles/syntax/base.less";
@import "styles/syntax/css.less";
@import "styles/syntax/elixir.less";
@import "styles/syntax/gfm.less";
@import "styles/syntax/go.less";
@import "styles/syntax/ini.less";
@import "styles/syntax/java.less";
@import "styles/syntax/javascript.less";
@import "styles/syntax/typescript.less";
@import "styles/syntax/json.less";
@import "styles/syntax/ng.less";
@import "styles/syntax/ruby.less";
@import "styles/syntax/php.less";
@import "styles/syntax/python.less";

View File

@ -0,0 +1,10 @@
.syntax--source.syntax--css {
// highlight properties/values if they are supported
.syntax--property-name,
.syntax--property-value {
color: @mono-2;
&.syntax--support {
color: @mono-1;
}
}
}

View File

@ -0,0 +1,312 @@
/*
This defines styling rules for syntax classes.
See the naming conventions for a list of syntax classes:
https://flight-manual.atom.io/hacking-atom/sections/syntax-naming-conventions
When styling rules conflict:
- The last rule overrides previous rules.
- The rule with most classes and pseudo-classes overrides the last rule.
*/
// if for and del let = &&
.syntax--keyword {
color: @hue-3;
// int char float
&.syntax--type {
color: @hue-1;
}
// super
&.syntax--function {
color: @hue-5;
}
// this self
&.syntax--variable {
color: @hue-5;
}
}
// identifier
.syntax--entity {
color: @mono-1;
// function(parameter)
&.syntax--parameter {
color: @mono-1;
}
// self cls iota
&.syntax--support {
color: @hue-5;
}
// @entity.decorator
&.syntax--decorator:last-child {
color: @hue-2;
}
// label:
&.syntax--label {
text-decoration: underline;
}
// function method
&.syntax--function {
color: @hue-2;
}
// add
&.syntax--operator {
color: @hue-2;
// %>% <=>
&.syntax--symbolic {
color: @mono-1;
}
}
// String Class int rune list
&.syntax--type {
color: @hue-1;
}
// div span
&.syntax--tag {
color: @hue-5;
}
// href src alt
&.syntax--attribute {
color: @hue-6;
}
}
// () [] {} => @
.syntax--punctuation {
color: @mono-1;
&.syntax--accessor {
color: @mono-1;
// . -> ::
&.syntax--member,
&.syntax--scope {
color: @hue-3;
}
}
// { } ~~~
&.syntax--embedded {
color: @hue-3;
}
}
// "string"
.syntax--string {
color: @hue-4;
// :immutable
&.syntax--immutable {
color: @hue-4;
}
// {placeholder} %().2f
&.syntax--part {
color: @hue-1;
}
// ${ }
&.syntax--interpolation {
color: @hue-3;
}
// /^reg[ex]?p/
&.syntax--regexp {
color: @hue-4;
// ^ $ \b ? + i
&.syntax--language {
color: @hue-3;
}
// <variable> \1
&.syntax--variable {
color: @hue-2;
}
// ( ) [^ ] (?= ) |
&.syntax--punctuation {
color: @hue-3;
}
}
}
// literal 4 1.3 true nil
.syntax--constant {
color: @hue-6;
// &lt; 'a'
&.syntax--character {
color: @hue-4;
// \" \' \g \.
&.syntax--escape {
color: @hue-4;
}
// \u2661 \n \t \W .
&.syntax--code {
color: @hue-1;
}
}
}
// text
.syntax--text {
color: @mono-1;
}
// __formatted__
.syntax--markup {
// # Heading
&.syntax--heading {
color: @hue-5;
}
// 1. * -
&.syntax--list.syntax--punctuation {
color: @hue-5;
}
// > quote
&.syntax--quote {
color: @mono-3;
font-style: italic;
}
// **bold**
&.syntax--bold {
color: @hue-6;
font-weight: bold;
}
// *italic*
&.syntax--italic {
color: @hue-3;
font-style: italic;
}
// __underline__
&.syntax--underline {
color: @hue-1;
text-decoration: underline;
}
// ~~strike~~
&.syntax--strike {
color: @hue-5;
}
// `raw`
&.syntax--raw {
color: @hue-4;
}
// url.com (path)
&.syntax--link {
color: @hue-1;
}
// [alt] ![alt]
&.syntax--alt {
color: @hue-2;
}
// {++ inserted ++}
&.syntax--inserted {
color: @hue-4;
.syntax--punctuation {
color: @hue-4;
}
}
// {== highlighted ==}
&.syntax--highlighted {
color: @hue-4;
.syntax--punctuation {
color: @hue-4;
}
}
// {-- deleted --}
&.syntax--deleted {
color: @hue-5;
.syntax--punctuation {
color: @hue-5;
}
}
// {~~ from~>to ~~}
&.syntax--changed {
color: @hue-3;
.syntax--punctuation {
color: @hue-3;
}
}
// {>> commented <<}
&.syntax--commented {
color: @mono-3;
.syntax--punctuation {
color: @mono-3;
}
}
}
// /* comment */
.syntax--comment {
color: @mono-3;
font-style: italic;
// @param TODO NOTE
&.syntax--caption {
color: lighten(@mono-3, 6);
font-weight: bold;
}
// variable function type
&.syntax--term {
color: lighten(@mono-3, 9);
}
// { } / .
&.syntax--punctuation {
color: @mono-3;
font-weight: normal;
}
}
// 0invalid
.syntax--invalid:not(.syntax--punctuation) {
// §illegal
&.syntax--illegal {
color: @syntax-illegal-fg !important;
background-color: @syntax-illegal-bg !important;
}
// obsolete()
&.syntax--deprecated {
color: @syntax-deprecated-fg !important;
background-color: @syntax-deprecated-bg !important;
}
}

View File

@ -1,10 +1,103 @@
.syntax--source.syntax--css {
// highlight properties/values if they are supported
.syntax--property-name,
.syntax--property-value {
.syntax--entity {
// function()
&.syntax--function {
color: @mono-2;
// url rgb
&.syntax--support {
color: @hue-1;
}
}
// .class :pseudo-class attribute
&.syntax--selector {
color: @hue-6;
// div span
&.syntax--tag {
color: @hue-5;
}
// #id
&.syntax--id {
color: @hue-2;
}
}
// property: constant
&.syntax--property {
color: @mono-2;
// height position border
&.syntax--support {
color: @mono-1;
}
}
// --variable
&.syntax--variable {
color: @hue-5;
}
}
// property: constant
.syntax--constant {
color: @mono-2;
// flex solid bold
&.syntax--support {
color: @mono-1;
}
// 3px 4em
&.syntax--numeric {
color: @hue-6;
}
// screen print
&.syntax--media {
color: @hue-6;
}
// #b294bb blue red
&.syntax--color {
color: @hue-6;
}
// from to
&.syntax--offset {
color: @mono-1;
}
// [attribute=attribute-value]
&.syntax--attribute-value {
color: @hue-4;
}
}
.syntax--punctuation {
// . : ::
&.syntax--selector {
color: @hue-6;
// *
&.syntax--wildcard {
color: @hue-5;
}
// #
&.syntax--id {
color: @hue-2;
}
// []
&.syntax--attribute {
color: @mono-1;
}
}
}
}

View File

@ -8,12 +8,6 @@ module.exports = {
atom.config.observe(`${themeName}.tabCloseButton`, setTabCloseButton);
atom.config.observe(`${themeName}.hideDockButtons`, setHideDockButtons);
atom.config.observe(`${themeName}.stickyHeaders`, setStickyHeaders);
// DEPRECATED: This can be removed at some point (added in Atom 1.17/1.18ish)
// It removes `layoutMode`
if (atom.config.get(`${themeName}.layoutMode`)) {
atom.config.unset(`${themeName}.layoutMode`);
}
},
deactivate() {

View File

@ -5,20 +5,23 @@
@import "styles/editor.less";
@import "styles/syntax/_base.less";
@import "styles/syntax/c.less";
@import "styles/syntax/cpp.less";
@import "styles/syntax/cs.less";
@import "styles/syntax-legacy/_base.less";
// @import "styles/syntax-legacy/c.less";
// @import "styles/syntax-legacy/cpp.less";
@import "styles/syntax-legacy/cs.less";
@import "styles/syntax-legacy/css.less";
@import "styles/syntax-legacy/elixir.less";
@import "styles/syntax-legacy/gfm.less";
// @import "styles/syntax-legacy/go.less";
@import "styles/syntax-legacy/ini.less";
@import "styles/syntax-legacy/java.less";
// @import "styles/syntax-legacy/javascript.less";
@import "styles/syntax-legacy/typescript.less";
@import "styles/syntax-legacy/json.less";
@import "styles/syntax-legacy/ng.less";
// @import "styles/syntax-legacy/ruby.less";
@import "styles/syntax-legacy/php.less";
// @import "styles/syntax-legacy/python.less";
@import "styles/syntax/base.less";
@import "styles/syntax/css.less";
@import "styles/syntax/elixir.less";
@import "styles/syntax/gfm.less";
@import "styles/syntax/go.less";
@import "styles/syntax/ini.less";
@import "styles/syntax/java.less";
@import "styles/syntax/javascript.less";
@import "styles/syntax/typescript.less";
@import "styles/syntax/json.less";
@import "styles/syntax/ng.less";
@import "styles/syntax/ruby.less";
@import "styles/syntax/php.less";
@import "styles/syntax/python.less";

View File

@ -19,8 +19,8 @@
@hue-5: hsl( 5, 74%, 59%); // <-red 1
@hue-5-2: hsl(344, 84%, 43%); // <-red 2
@hue-6: hsl(41, 99%, 30%); // <-orange 1
@hue-6-2: hsl(41, 99%, 38%); // <-orange 2
@hue-6: hsl(35, 99%, 36%); // <-orange 1
@hue-6-2: hsl(35, 99%, 40%); // <-orange 2
// Base colors -----------------------------------

View File

@ -0,0 +1,12 @@
.syntax--source.syntax--css {
// highlight properties/values if they are supported
.syntax--property-name,
.syntax--property-value {
color: @mono-2;
&.syntax--support {
color: @mono-1;
}
}
}

Some files were not shown because too many files have changed in this diff Show More