Commit Graph

9197 Commits

Author SHA1 Message Date
Andrew Dupont
5c00a36c30 [styleguide] Fix error when styleguide is shown…
…before certain grammars are loaded.
2023-07-18 12:21:42 -07:00
Andrew Dupont
30e63884f5
Merge pull request #555 from savetheclocktower/tree-sitter-heaven
Running PR for Tree-sitter fixes
2023-07-13 22:06:48 -07:00
Andrew Dupont
59fe4a8af3 [tree-sitter] Add multiple argument support…
…to each of `onlyIfDescendantOfType` and `onlyIfAncestorOfType`.

Each of these can now accept a space-separated list of node types. If any of the
node's ancestors or descendants matches any of the given types, the test passes.
2023-07-08 18:01:03 -07:00
confused_techie
c6783a00dc
Merge pull request #588 from pulsar-edit/easy-version-comparison
[core]: Implement API on `atom.` to compare Pulsar Versions
2023-07-04 12:34:52 -07:00
confused-Techie
a2a2a063b7 More safety checks, allowing us to bail quickly, more tests 2023-07-02 12:22:45 -07:00
confused-Techie
9e4f754ef6 New tests, multi parameter fixes 2023-07-02 03:38:03 -07:00
confused-Techie
9353b113ed Better tests 2023-07-01 21:02:06 -07:00
confused-Techie
76f1210c68 Starting some tests 2023-07-01 18:36:26 -07:00
confused-Techie
95ae9e8b6a Rewrite, and simplify 2023-06-14 17:17:20 -07:00
confused-Techie
d00729fe24 Implement proper version checking functions 2023-06-13 19:30:34 -07:00
Andrew Dupont
2006f9ccd0 (oops) 2023-05-22 18:10:29 -07:00
Andrew Dupont
83c76da0d8 Fix issue with scopeDescriptorForPosition
…when more than one layer wants to apply a scope at the given point.
2023-05-22 17:47:21 -07:00
Andrew Dupont
ef2f8abed2 Update TreeSitterLanguageMode spec…
…not to expect empty tokens.

I made a change in 29cfcad that neglected to apply any scopes for a range that
was zero characters long. My instincts tell me that this is a safe change to
make, but it does affect any tests that used `tokensForScreenRow` and expected
it to report information about zero-length tokens. So the expected results
needed to be updated.
2023-05-19 14:32:27 -07:00
Andrew Dupont
8afe2f6fc4 Ensure suggestedIndentForBufferRows works right…
…when straddling an injection boundary.

When we do this one row at a time, the controlling layer for an indent query is
the comparison (previous) row, because that's where the query starts. The batch
version should be no different.

The new spec describes the exact scenario that revealed this bug.
2023-05-19 14:18:04 -07:00
Andrew Dupont
a20cd066be Merge from master 2023-05-19 11:00:56 -07:00
confused-Techie
8385f0dc80 Fix text that test checks for 2023-05-10 19:40:09 -07:00
confused-Techie
e7607d2ee9 Add new package activation hook, and spec 2023-05-10 17:59:53 -07:00
Maurício Szabo
d4b5bc3090 Removed tests related to caching incompatible things 2023-05-09 21:07:44 -03:00
Andrew Dupont
31f67b9fd6 Give onlyIf(Not)Type ability…
…to accept multiple node types.
2023-05-04 21:28:39 -07:00
Andrew Dupont
1c90032276 Add namespaces to custom #set! predicates
Predicates were getting pretty chaotic. With the namespace, it's now clearer
where a predicate may be defined and what its purpose is. It also helps resolve
ambiguity — e.g., both folds and highlights can have an `endAt` predicate, so
now they're disambiguated as `fold.endAt` and `adjust.endAt`, respectively.

Namespaces:

* `highlight` for highlight-specific settings (of which there is presently only
   one)
* `test` for scope tests (currently used by highlights and indents)
* `adjust` for scope adjustments (highlights)
* `indent` for indent settings
* `fold` for fold settings

Right now, only the `test` namespace will be used by more than one kind of query
file, but I could imagine that changing in the future.

For now, tests and adjustments still work without the prepended namespace, but
I imagine I'll take that out even before we ship this feature experimentally.
Much easier to make big changes like this before anyone depends on them.

This also draws a much clearer line between `#set!` predicates with special
meaning in Pulsar… and those which are being used to set arbitrary data for
later use. For instance, if you see `(#set! isOnLeftSideOfAssignment true)`, you
know it must just be arbitrary data.
2023-04-29 14:58:42 -07:00
Andrew Dupont
92dfb5aab3 Add scope test onlyIfFirstTextOnRow
…and its negation.
2023-04-26 18:17:41 -07:00
Andrew Dupont
71d4ad1d07 Restore core.useTreeSitterParsers setting…
…along with a temporary `core.useExperimentalModernTreeSitter` setting.

If we truly planned to keep three different language modes around indefinitely,
changing `core.useTreeSitterParsers` to an enum would make sense. But we don't,
so it'd actually just be a gigantic pain in the ass to migrate one setting to
another of a different type.

When we ship modern-tree-sitter experimentally, we'll make it opt-in via the
temporary setting. When we make it the official tree-sitter implementation and
remove the legacy node-tree-sitter version, we'll remove the temporary setting
and just change the semantics around `core.useTreeSitterParsers`.

Reverting the addition of the `core.languageParser` setting is a chore, but it
prevents a _gigantic_ future headache.
2023-04-26 17:46:02 -07:00
Andrew Dupont
4ca19440dc Add invalidateOnChange scope setting
It's possible to assign a node different scopes based on its contents, but we
need a way to detect these sorts of nodes so that we know how much of the buffer
to invalidate when that node's contents change.

Previously, we were simply finding the range of the deepest node in the tree for
a given edit and invalidating its entire region, in the hopes that this
heuristic would let us hide this complexity from users. Sadly, we can't get away
with that in terms of performance; the most specific node could end up being a
_very large_ node, and it's just not worth slowing everything else down just to
handle these silly edge cases.

Instead, a grammar author can mark certain queries in `highlights.scm` with
an `invalidateOnChange` property:

```scm
((comment) @comment.block.documentation.javadoc.java
  (#match? @comment.block.documentation.javadoc.java "^/\\*\\*")
  (#set! final true)
  (#set! invalidateOnChange true))

((comment) @comment.block.java
  (#match? @comment.block.java "^/\\*")
  (#set! invalidateOnChange true))

```
Here we've got one scope for a JavaDoc (`/**`) block comment and one for a
regular (`/*`) block comment. Since a change in either kind can flip the scope
of the entire comment, both should be marked with `invalidateOnChange`.

If the world were perfect — if the web-tree-sitter bindings allowed it, or if
we could pre-process query files — we could set this property automatically
whenever a node both (a) defined a `#match?` predicate and (b) began and ended
on different rows. We'd be able to use that information to keep track of these
nodes on our own, as well as detect whether an arbitrary edit will actually
trigger a scope change. In the meantime, this is an unusual enough need that
we'll put the onus on the grammar author for now.
2023-04-26 17:30:50 -07:00
Andrew Dupont
70b8bad11b Style tweaks 2023-04-25 17:47:33 -07:00
Andrew Dupont
2cd20067b5 Rename syntaxQuery to highlightsQuery
The `syntaxQuery` key in a grammar definition file is the only query whose name
differs from its canonical filename, and there's no reason why that should be
the case. Might as well change it now before we ship instead of going through
the pain of changing it later.
2023-04-25 11:38:53 -07:00
Andrew Dupont
c0c4300dfc Be more cautious in the specs…
…by not assuming a certain tree structure.

The injection-point callbacks should not make any assumptions about the tree
because there's no guaranteed that they'll run when the tree is clean.
2023-04-24 11:01:37 -07:00
Andrew Dupont
64a676702b Fix pasting when clipboard text has no newline…
…so as not to trigger an auto-indent.
2023-04-21 17:39:41 -07:00
Andrew Dupont
5e07320f57 Fix issues with TextEditor#pasteText
* A paste that ended in a newline would incorrectly adjust the row after the
  end of the pasted text.
* A paste that needed no after-paste adjustment would incorrectly alter the
  undo history.
2023-04-19 16:48:33 -07:00
Andrew Dupont
0a165a36ac Add async parsing support
This is a big one. All the tests pass and I haven't been able to make it
explode in ages, so it's ready for testing by others. But if you manage to make
it break, you can flip the `FEATURE_ASYNC_PARSE` flag back to `false`.

This sets a time limit (currently 3ms) for parsing; if the job needs more time
than that, we return a promise and keep working on the parsing in a series of
jobs that each take no more than 3ms, yielding in between. The editor stays
responsive and the highlighting will catch up when it's able.

The system is able to account for edits that are made during an async parse,
and will keep re-parsing to handle those edits until the tree is clean.

In practice, this has been surprisingly pleasant to use, even on very large
files; and smaller files are unlikely to exceed that 3ms threshold very often.

We can play around with the exact threshold. If we make it smaller, then
theoretically the UI gets even snappier, but there's more overhead when the
parsing is divided into smaller tasks. To keep the UI snappy, we'd want to limit
the threshold to some fraction of the 16.67ms that we're given with each
UI frame, keeping in mind that there's plenty of work to do in that allotted
time _after_ the tree gets parsed.
2023-04-19 11:36:19 -07:00
Andrew Dupont
778e26bf70 Fix indentation of successive newlines…
…when `whitespace` package is enabled.
2023-04-16 23:27:00 -07:00
Andrew Dupont
9d8ac0a82b Add experimental support for async indentation
The goal is to support as much as possible of what can be done synchronously
in TextMate grammars (using a perplexing regex-based system) by going async when
necessary in modern Tree-sitter grammars (using an `indents.scm` file that is
far easier to understand).

The one true concession we have to make here is to accept that certain
auto-indent behaviors can't be replicated atomically if they happen inside of a
transaction alongside other changes. In those cases, we must wait until the end
of the transaction, then auto-indent the entire range affected by the
transaction instead.

If you're interested in knowing more about this… well, I'd be surprised. But the
entire rationale is documented here:

https://gist.github.com/savetheclocktower/4fd4e3edce76ee5820990db0f012062e
2023-04-16 15:12:14 -07:00
Andrew Dupont
1fdbeed139 Update specs…
…to account for slightly different behavior in the `tree-sitter-html` parser
(no longer claims leading space before a `fragment` node).
2023-04-12 17:36:33 -07:00
Andrew Dupont
72bac77457 Ensure that ordering of scopes is correct…
…no matter where `HighlightIterator` starts.

If `HighlightIterator` tried to start a highlighting job at a point where more
than one layer reported an already-open scope, those scopes were combined such
that those from shallower layers went first. But that's not necessarily right,
and it's important to get the ordering correct because it affects
`scopeDescriptorForPosition` in particular.

Luckily, all the information we had to compile to find out if already-open
scopes should be covered by deeper injection layers… is exactly what we need to
solve this problem. When we assemble the list of open scopes, we can sort them
based on buffer position, only using layer depth to break ties.
2023-04-09 12:05:44 -07:00
Andrew Dupont
a0b897e7e3 Fix highlighting for coverShallowerScopes
All the logic that we had employed to decide whether an injection ought to
prevent a shallower layer from scoping a particular region… was completely
ignored when determining which scopes should already be open as part of
`HighlightIterator#seek`. Hence a scope boundary might be suppressed if it's in
the middle of a highlighting job's range, but still might be assumed to be open
for a highlighting job that starts a few lines later.

To fix this, we've got to keep track of when those already-open scopes would've
opened, and if we find that one injection layer has enabled
`coverShallowerScopes`, we must re-assess those open scopes and remove the ones
that _would've_ been suppressed if we were highlighting the area where the scope
would've opened.

With me so far?

There's another thing that needed fixing: an injection layer can stop its parent
from applying a scope to an arbitrary token, but it should not be able to stop
its parent from applying its _base_ scope, like `source.js`. That's also been
fixed.

If I had to do it all over again, I would've dropped the ability of one layer to
“cover” the scopes of another, but it was already half-implemented in
`TreeSitterLanguageMode` and I felt compelled to implement it _properly_,
for whatever definition of “properly” I had in my head at the time. Now it's an
opt-in behavior, and anyone who opts into it deserves what they get.

All the existing specs still pass, and I added a new one for this new behavior.
Luckily, the current implementation of `scopeDescriptorForPosition` is the
perfect way to test this, because it ends up calling `HighlightIterator#seek` at
the precise position we tell it to.

And a new option for injection points has been added:
`includeAdjacentWhitespace`. During my windmill-tilting efforts to take an
otherwise great `tree-sitter-markdown` parser and try to inject a YAML
front-matter section — despite its lack of understanding of that syntax — I
discovered that a certain section of YAML wasn't parsing right because the
`tree-sitter-markdown` parser was ignoring a bit of leading whitespace that the
`tree-sitter-yaml` parser needed to see, because it was syntactically
meaningful. That made me realize how to handle this in the injection point API.

I wouldn't dare try to land that YAML/Markdown hack into the Pulsar core, but
the `includeAdjacentWhitespace` option will be useful for other injections, most
notably PHP. When a `content` callback returns an array of nodes, often that
gets converted into a series of disjoint ranges that _aren't_ actually disjoint;
they're just consecutive syntax nodes separated by whitespace. So the new option
takes this into account; when it's enabled, if two would-be injection ranges are
separated only by whitespace, then those two ranges are consolidated into a
single range _along with_ that whitespace.
2023-04-07 14:42:30 -07:00
Andrew Dupont
9547869d20 Merge branch 'master' of github.com:pulsar-edit/pulsar into tree-sitter-hell 2023-04-06 12:32:00 -07:00
Andrew Dupont
4f3f8713b0 Get a WASMTreeSitterLanguageMode spec passing 2023-04-06 12:30:46 -07:00
Andrew Dupont
67df47b53e Add ability to test value in scope tests…
`onlyIfRangeWithData` and `onlyIfDescendantOfNodeWithData` (and their
negations).

Unlike `onlyIfConfig`, we're comparing these values to earlier values from
`#set!` predicates, so we shouldn't coerce them at all.

Fix a few scope resolution bugs.
2023-04-04 09:52:33 -07:00
Andrew Dupont
923615c873 Add more indentation specs for WASMTreeSitterLanguageMode
Also fix some ScopeResolver specs and make it so that we cache config values
until the config changes.
2023-04-03 14:22:59 -07:00
Andrew Dupont
46371b511f Add scope tests and specs
Added and renamed a few specs, most notably the new `onlyIfConfig`.

Wrote specs for all the positive versions of tests, omitting specs for the
negations; therefore I've aimed to make the negations as simple as possible so
that they are implicitly proven to work as long as their counterparts work.
2023-04-02 16:42:34 -07:00
Andrew Dupont
58bd7ebe99 Add languageScope specs for addInjectionPoint 2023-04-02 14:20:52 -07:00
Andrew Dupont
29cfcad830 Place base language scopes more accurately…
…in injected layers.

The last straw was the realization that in the following Markdown…

```js
let foo = "bar";
```

…the entire code fence, including the backticks, would carry the `source.js`
scope name. Instead, each injection range should begin `source.js` at its start
and end `source.js` at its end.

This could leave spaces inside of injections unscoped — because whitespace is
often excluded from injection ranges — but that's just something we have to live
with for now.
2023-04-02 14:05:36 -07:00
Andrew Dupont
fc1578d737 Fix accuracy of scopeDescriptorForPosition
…by making its implementation identical to that of `TreeSitterLanguageMode`.

They had it right all along — to ensure fidelity, use the exact same approach
that the display layer itself uses. This should prevent
`scopeDescriptorForPosition`'s information from straying too far from reality.

Also fixed `bufferRangeForScopeAtPosition`, which had no knowledge of covered
scopes or scope adjustments. Added specs.
2023-03-31 15:12:37 -07:00
Andrew Dupont
033f5c6498 Update grammar-registry and grammar-selector…
…to prefer new-tree-sitter grammars when the experimental setting is opted into,
and ignore them when it isn't.
2023-03-30 12:14:58 -07:00
Andrew Dupont
9226d626ac Get the tests passing again
Fixed logic in `scopeDescriptorForPosition` and stale cache in `FoldResolver`.
2023-03-28 14:27:37 -07:00
Andrew Dupont
4c9ce4fc6b Add new scope tests and some specs to cover them 2023-03-28 11:31:06 -07:00
Andrew Dupont
0be188fc9a Add TypeScript and TSX grammars
These two sets of query files share a lot of rules. I don't love the duplication. But it'll do for now.
2023-03-23 17:33:25 -07:00
Andrew Dupont
7036b81db5 Fix issue where a change to the buffer was under-invalidating the highlighting…
…because we had no way of realizing how much of the buffer was affected by a change.

This was a worst-case scenario: consider a multiline JavaDoc-style comment — i.e., staring with `/**`. Imagine a `highlights.scm` that uses `#match?` to scope it as either `comment.block` or `comment.block.documentation` based on the presence or absence of that second asterisk. Now imagine you remove that second asterisk to make it an ordinary block comment.

If the tree-sitter parser understands the difference between these things, and gives them different node types, there's no problem, because it'll tell you which ranges need new highlighting based on syntactic changes. But if the change merely means a different scope should be applied — like if you highlight documentation comments differently from block comments — the whole comment won't get re-scoped and re-highlighted, because the highlights query isn't consulted until after we decide how much to invalidate. In a Java file, only the line you edited would get invalidated, so the rest of the block comment would remain the wrong color.

An ideal solution here would be to

  (a) recognize when a buffer edit will cause a capture to `#match?` differently from how it does now; then
  (b) invalidate that range so as to get it re-highlighted.

The “problem” is that we don't run the highlights query until the display layer asks us to tell it what to re-highlight, plus we retain no data structure such that we can compare old-versus-new and see which things are different. But that's less of a problem and more of a design decision made in order to deliver acceptable performance and to keep that costly work in WASM-land where it belongs.

The solution I arrived at is to

  (a) detect the range of the deepest single node that has been affected by an edit, and
  (b) ensure sure we invalidate at least that much of the buffer when we make a change.

In most cases, this will not even cause more syntax highlighting to take place; Pulsar always seems to re-highlight at least the entire row that we're on when we insert as little as a single character.

This does put some limits on how people can use `#match?`, but those are prudent limits anyway. Imagine deciding to scope things differently based on the text contained in a distant descendant, or even in a _sibling_. These are footguns.

If we really didn't like this and needed to solve it in a more general way, we could invent a new kind of specialized SCM file called `invalidations.scm`, and define captures for any kind of node that needs to be invalidated if an arbitrary change happens within it. We could run that query as part of the process of evaluating which ranges to re-highlight. Folks would want to do this sparingly, but if there were no other way to get the kind of highlighting needed in a particular grammar, then it would be a necessary evil.
2023-03-23 16:07:09 -07:00
Andrew Dupont
a284f11b04 Add suggestedIndentForBufferRow spec 2023-03-21 13:44:25 -07:00
Andrew Dupont
f8fef24263 Move ScopeResolver to its own file…
…and write some specs for it.
2023-03-21 12:59:36 -07:00
Maurício Szabo
03057610f6 Removing ALL references of old first-mate 2023-03-20 16:51:42 -03:00
Andrew Dupont
62e14f9baa Add wasm-tree-sitter-language-mode-spec.js
Watch these tests fail less and less over the next few days as I add more grammars!
2023-03-20 10:50:36 -07:00
Maurício Szabo
ebb54aaed5 Merge remote-tracking branch 'origin/master' into feature/modernize-tree-sitter 2023-02-16 17:57:01 -03:00
confused-Techie
1e1ce6043a Moved usage of coffee-script to coffeescript 2023-01-29 19:44:06 -08:00
Maurício Szabo
a0d6619e3d Avoiding specs that have no spec file 2023-01-27 16:21:35 -03:00
Maurício Szabo
beb1701753 Changed config for tree-sitter to be grammar-based 2023-01-14 17:53:41 -03:00
Maurício Szabo
76ba30162c Disable debounce (I guess?) 2023-01-10 22:05:29 -03:00
Maurício Szabo
d40bf7ca99 Commented command installer 2023-01-05 12:45:50 -03:00
Maurício Szabo
5ac9911621 Fixed reporter 2023-01-05 11:53:50 -03:00
Maurício Szabo
921bb34a5f Added a new way to filter for tests 2023-01-04 21:37:03 -03:00
Maurício Szabo
3e3709bc72 Making a reporter that's easy to retry 2023-01-04 20:36:34 -03:00
Sertonix
6d2214b669 remove unused files 2022-12-10 20:30:19 +01:00
DeeDeeG
ec90256971
Fix a spec to expect 'Pulsar', not 'Atom' (#116) 2022-11-09 22:08:24 -05:00
DeeDeeG
4c7f74ba34
Merge pull request #115 from pulsar-edit/remove-benchmark-mode-part-two
Remove benchmark mode, part two
2022-11-09 16:01:00 -05:00
Maurício Szabo
03d748d088 Removed private isDeprecated API 2022-11-09 00:31:25 -03:00
DeeDeeG
38509f2662 spec: Update benchmark-related spec
Update spec to expect the new behavior where benchmark mode
doesn't open a new window (only logs a message to the console).
2022-11-03 22:56:00 -04:00
confused-Techie
30d295b3f6 Fix on command-installer-spec.js tests 2022-09-25 02:51:35 -07:00
confused-Techie
90d7c19836 Added MacOS Failing tests: smoek-spec.js 2022-09-25 01:42:48 -07:00
confused-Techie
f8b6976e35 Added macos failing: command-installer-spec.js 2022-09-25 01:38:54 -07:00
confused-Techie
70a09de373 Added workspace-element-spec.js 2022-09-25 00:22:51 -07:00
confused-Techie
bc4e93b1af Added: tree-indenter-spec.js 2022-09-25 00:15:10 -07:00
confused-Techie
b457c768a5 Added text-editor-component-spec.js 2022-09-25 00:13:28 -07:00
confused-Techie
b3349a2f09 Added package-manager-spec.js 2022-09-25 00:05:10 -07:00
confused-Techie
e506bbcdd2 Added compile-cache-spec.js 2022-09-25 00:03:47 -07:00
confused-Techie
4ed48bffc2 Added buffered-process-spec.js 2022-09-24 23:59:58 -07:00
confused-Techie
f87c55ff72 Added failing tests from atom-paths-spec.js 2022-09-24 23:56:33 -07:00
confused_techie
62cad3c994
Merge pull request #50 from pulsar-edit/debounce-spy
Debounce spy
2022-09-12 17:11:33 -07:00
confused_techie
9b69204863
Merge pull request #40 from pulsar-edit/39-remove-telemetry-from-core
Remove Telemetry and Remote Crash Reports: Resolves #39
2022-09-10 14:16:03 -07:00
confused-Techie
e80ab284c8 Revert Commit 51a1f75998
This commit was made originally to avoid timing while testing. But as thats now fixed this can be restored to original functionality.
2022-09-07 16:55:19 -07:00
confused-Techie
71845c7559 Separated mockDebounce to new spec-helper-functions.js and added more comments 2022-09-06 16:29:08 -07:00
confused_techie
d36c898f5a
Merge pull request #45 from pulsar-edit/no-brittle-tests
Improve test reproducibility + Decaffeinate
2022-09-05 14:59:22 -07:00
confused-Techie
da622e05d9 Mocked Debounce 2022-09-05 14:28:14 -07:00
confused-Techie
aca07813bd Decaffeinate spec-helper.coffee 2022-09-05 14:17:29 -07:00
confused-Techie
b623d93fa0 Decaffeinate 2022-09-05 14:13:39 -07:00
confused-Techie
ceeaf0a01e Mirrored changes made in @mauricioszabo Commit 51a1f75998 2022-09-04 15:35:56 -07:00
Fabian Fiorotto
b48db24392 Destroy panels after test. 2022-09-04 15:30:51 -07:00
Fabian Fiorotto
3c3b40b53e Disable middle-click paste for cursor position test. 2022-09-04 15:30:40 -07:00
confused-Techie
ff3548823a Decaffeinate 2022-09-03 23:21:55 -07:00
confused-Techie
773fcfe336 Fix test 1, by adding none empty node at injection point 2022-09-01 22:13:22 -07:00
confused-Techie
9ff325dc3e Removed telemetry testing. Removed remote crash reports 2022-08-29 20:17:08 -07:00
Maurício Szabo
c4304c0d3b Fixed specs that expected libs to be on scripts 2022-08-15 15:02:37 -03:00
Amin Yahyaabadi
adcb4022c7 test: spy on the actual compile function instead of spying on Babel 2022-07-03 01:50:47 -07:00
Amin Yahyaabadi
fb8803264a test: fix the babel spy in the spec 2022-07-02 11:03:54 -07:00
Amin Yahyaabadi
9a775082dd Merge branch 'master' into pr/67 2022-06-30 00:32:26 -07:00
Sadick
eb6258fd50
Merge pull request #22687 from atom/electron-upgrade-11.4.7
Electron upgrade 11.4.7
2021-12-02 15:59:52 +03:00
Musa Ibrahim
cbde3ea00d
Revert "Only allow drag-and-drop to succeed on panes in the center workspace" 2021-10-25 18:14:08 +01:00
Sadick
38f403a5e0
Merge pull request #19016 from atom/wl-clipboard-line-endings
Convert line endings when copy and pasting
2021-09-30 12:42:36 +03:00
sadick254
c8f3f86db9
Fix text-editor failing spec
Compare against the platforms eol marker.
2021-09-29 14:03:50 +03:00
Rafael Oleza
decb5e3c91
Re-apply prettier JS formatter 2021-09-29 13:41:03 +03:00
Winston Liu
e73a454def
🎨 2021-09-29 13:41:02 +03:00
Winston Liu
e71d5594f7 Fix specs 2021-09-28 23:54:13 +00:00