Commit graph

4090 commits

Author SHA1 Message Date
Johannes Altmanninger
c48b02e418 fixup! Fix commandline state for custom completions with variable overrides
The previous commit added transient commandlines when completing
commands with variable overrides. Transient commandlines require a
parser, but perform_one_completion_cd_test() asked for completions
without giving a parser, which is only okay when asking for
autosuggestions (like perform_one_autosuggestion_cd_test() does).
Let's pass a parser to fix the test.
2022-01-27 04:19:30 +01:00
Johannes Altmanninger
df3b0bd89f Fix commandline state for custom completions with variable overrides
Today, a command like "var=val status " has custom completions
because we skip over the var=val variable override when detecting
the command token.
However if the custom completions read the commandline state (via
"commandline -opc") they do see they variable override, which breaks
them, most likely. Try "a=b git ".

For completions of wrapped commands, we already set a transient
commandline. Do the same for commands with  leading variable overrides;
then git completions for "a=b git " will think the commandline is
"git ".
2022-01-27 03:51:32 +01:00
Aaron Gyes
275601665f Shorten more commands
We're at 2 columns @ 115-wide terminal.
2022-01-22 21:21:21 -08:00
Aaron Gyes
81c46183fd breakpoint: shorter 2022-01-22 21:18:24 -08:00
Aaron Gyes
1262469aea Shorten two more command's descriptions
Two columns at 119 width.
2022-01-22 21:04:26 -08:00
Aaron Gyes
cd47411bbb Shorten breakpoint description 2022-01-22 20:52:29 -08:00
Fabian Homborg
f40c054a6a Replace hangul hack with widecharwidth version
This updates widecharwidth to
6d3d55b419db93934517cb568d1a3d95909b4c7b, which includes the same
Hangul Jamo check in a separate table.

This should slightly speed up most width calculation because we no
longer need to do it for most chars, including the overwhelmingly
common ascii ones.

Also the range is increased and should better match reality.
2022-01-21 17:10:52 +01:00
ridiculousfish
1f8ce5ff6c Stop ignoring initial command in read -c
`read` allows specifying the initial command line text. This was
text got accidentally ignored starting in a32248277f. Fix this
regression and add a test.

Fixes #8633
2022-01-16 13:36:48 -08:00
Fabian Homborg
0781473564 argparse: Jump to the next option after an unknown one
Previously, when we got an unknown option with --ignore-unknown, we
would increment woptind but still try to read the same contents.

This means in e.g.

```
argparse -i h -- -ooo -h
```

The `-h` would also be skipped as an option, because after the first
`-o` getopt reads the other two `-o` and skips that many options.

This could be handled more extensively in wgetopt, but the simpler fix
is to just skip to the next argv entry once we have an unknown option
- there's nothing more we can do with it anyway!

Additionally, document this and clearly explain that we currently
don't transform the option.

Fixes #8637
2022-01-15 12:17:43 +01:00
Fabian Homborg
1eb58f9054 Tests: Merge "notifiers" and "universal" groups
The sole notifiers test recreated the uvar directory, so if it was
called while the universal test was running it would stop it from
completing correctly.

This happened reasonably often on Ubuntu with tsan on Github Actions.
2022-01-09 23:26:33 +01:00
David Adam
b49dd30179 builtins/block: correct an errant comment 2022-01-09 22:00:58 +08:00
ridiculousfish
57a9fe492e Allow using poll() to check for readability
Cygwin tests are failing because cygwin has a low limit of only 64 fds in
select(). Extend select_wrapper_t to also support using poll(), according to
a FISH_USE_POLL new define. All systems now use poll() except for Mac.

Rename select_wrapper_t to fd_readable_set_t since now it may not wrap
select().

This allows the deep-cmdsub.fish test to pass on Cygwin.
2022-01-02 16:36:33 -08:00
ridiculousfish
a5976f5b0d Disable certain autosuggestion tests on Cygwin
Cygwin disallows backslashes in filenames, so these tests cannot
possibly succeed there. Just disable them.
2021-12-30 11:44:14 -08:00
ridiculousfish
ab7a07e97c Disable a string length test on Cygwin
This test was failing because it assumed wchar_t is 32 bit.
No functional change here.
2021-12-30 11:36:06 -08:00
Fabian Homborg
940f52d717 math: Report missing operators between the tokens
This affects the caret position. In an expression like

123 456

we previously reported:

123 456
      ^ missing operator

Now we do:

123 456
   ^ missing operator

We do it on the first space, which should be acceptable.

(no need for a changelog entry, we have already ignored #8511)
2021-12-30 13:26:44 +01:00
Fabian Homborg
2c03cfecba Shebang error: Use /path/to/fish
Otherwise this looks like `#! fish` is a valid shebang, which it is
not. We don't interpret $PATH here, and the kernel typically doesn't.
2021-12-30 13:04:47 +01:00
ridiculousfish
3feb41f78f Correct the test_expand test
This unit test was passing 0 instead of a pointer to indicate the end of
a varargs; this might fail on 64 bit, and indeed did fail on Cygwin. This
fixes the Cygwin expand test.
2021-12-30 01:18:14 -08:00
David Adam
a52305e11c postfork: further updates to error messages
Only show the shebang warning for .fish commands.

Use the phrase "interpreter directive" as the formal name for the
shebang.

Switch from windows to Windows for the operating system.
2021-12-29 22:33:24 +08:00
ridiculousfish
ef281c7c4e Remove expand_flag::skip_home_directories
This could in principle be used to prevent home directory expansion, but
no call site uses it, so just remove it. No functional change here.
2021-12-28 15:13:50 -08:00
ridiculousfish
284427a6da Revert "Fix undefined behavior in closing a moved pipe"
There is no undefined behavior in closing a moved pipe, since the
move constructor simply sets the fd to -1, which is ignored by close().
The move constructor of autoclose_fd_t is "fully specified" (like
unique_ptr).

It's good practice to eagerly close pipes which may be inherited by
child processes, since otherwise the writer may not get EPIPE correctly.
Closing the pipe explicitly makes it clear that the pipe does not stay
open across continue_job().

This reverts commit c014c23662.
2021-12-28 14:25:24 -08:00
Johannes Altmanninger
65b34a12c0 Declare that two "not" keywords cancel each other out
"not not return 34" exits with 34, not 1.  This behavior is pretty
surprising but benign. I think it's very unlikely that anyone relies
on the opposite behavior, because using two "not" decorators in one
job is weird, and code that compares not's raw exit code is rare.

The behavior doesn't match our docs, but it's not worth changing the
docs because that would confuse newcomers. Add a test to cement the
behavior and a comment to explain this is intentional.

I considered adding the comment at
parse_execution_context_t::populate_not_process where this behavior
is implemented but the field defintion seems even better, because I
expect programmers to read that first.

Closes #8377
2021-12-28 19:32:30 +01:00
Fabian Homborg
4ceed7c482 Improve error message for fish scripts without shebang
When we execute something and it doesn't have a shebang, typically we
fall back on running it with /bin/sh. For .fish scripts, we still
refuse to do this (assuming that /bin/sh won't handle .fish scripts properly).

Only the error wasn't great. So we now explicitly mention when there's
a missing shebang, and point towards the shebang line otherwise.
2021-12-28 15:30:04 +01:00
David Adam
2e6bfe5c68 fish_tests: actually test fish_wcstod
The test was running against the standard library rather than the fish
replacement.
2021-12-27 14:07:17 +08:00
Aaron Gyes
29ccc08a53 unusued find_entry member: use it
Assuming this was meant to be used when created, simplify
two other spots to make use of find_entry().
2021-12-24 19:06:00 -08:00
Fabian Homborg
77bac22741 test: Also print proper caret for too many arguments
This case is handled specially for unknown reasons and was missed in #6030.
2021-12-24 16:08:41 +01:00
Aaron Gyes
89ba9f76e2 env.cpp: unusued var_table_t table in create_export_array() 2021-12-21 04:31:54 -08:00
Aaron Gyes
365a6ee384 Use source_offset_t (uint32) in tokenizer.
Seems like size_t is unnecessarily large as well, as elsewhere
in the code we are clamping down to uint32_t / source_offset_t.

This makes tok_t more like 16 bytes. More cleanup seems desirable,
this is not very well hamrnoized across our code base.
2021-12-21 02:32:52 -08:00
Aaron Gyes
8e1173bac9 Revert "common.h: use emplace in vec_append"
This was dumb, and not intended for commit.
This reverts commit ab353ce0e4.
2021-12-21 02:08:23 -08:00
Aaron Gyes
35253900cb rearrange tok_t fields in decreasing order
We can have vectors of these, maybe it adds up.
40 bytes -> 32 bytes
2021-12-21 01:29:26 -08:00
Aaron Gyes
ab353ce0e4 common.h: use emplace in vec_append 2021-12-20 22:54:59 -08:00
Aaron Gyes
9abbcc0ba6 ast.cpp: initialization order
member 'extras_' is used to initialize 'tokens_'.
members are initialized in the order they are declared in a class
2021-12-20 22:43:58 -08:00
ridiculousfish
0d67dd19a1 Switch path_get_data_is_remote to returning a real class enum
End the tricky use of maybe_t<bool> by using a real class enum.
2021-12-18 20:48:13 -08:00
Fabian Homborg
f082b6c1bd Only act on the locale vars we care about
Instead of 7a80ad74f, which adds ifdeffery, we simply drop the
variables we don't care about. This leaves two presumably
glibc-specific variables, but drops 5 variables like LC_MONETARY, so
it's overall a win.

This reverts commit 7a80ad74f4.
2021-12-13 11:52:17 +01:00
Aaron Gyes
7a80ad74f4 Cordon off glibc locale vars just for glibc 2.2
Phew
2021-12-13 01:56:48 -08:00
Aaron Gyes
b05757ee56 Fit status feaetures in 80 columns 2021-12-13 01:24:47 -08:00
ridiculousfish
68ee2ff9f3 Bravely stop removing quotes in builtin history delete
The builtin history delete call has some code that removes a leading and
trailing quote from its arguments. This code dates back to ec34f2527a,
when the builtin was introduced.  It seems wrong and tests pass
without it. Let's bravely remove it.
2021-12-12 14:26:45 -08:00
Aaron Gyes
76eef0fea9 Fix some extra arguments for string format functions. 2021-12-12 14:06:17 -08:00
Aaron Gyes
04a4693b5b history.h:
some typedefs -> using declarations
make the documentation comments work
2021-12-12 13:36:14 -08:00
Aaron Gyes
549fae1400 ast.h: remove unused private member finished() 2021-12-12 13:05:48 -08:00
Johannes Altmanninger
8208fc4f87 Cleanup comment to match implementation
This was recently changed to return bool.
2021-12-12 18:21:35 +01:00
Aaron Gyes
f464bbebfe command -v: exit 127 if command not found
Align with the spec
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/command.html

Fixes #8547
2021-12-11 22:15:26 -08:00
Aaron Gyes
ccf0b69c3d Apply Johannes' patch.
I goofed this up.
2021-12-11 10:49:40 -08:00
Andrey Mishchenko
fb73a4b2e2 Implement nextd-or-forward-word and prevd-or-backward-word in C++ 2021-12-11 10:19:18 +01:00
Aaron Gyes
e181d825fa fix maybe_lock_file
introduced in previous commit
2021-12-09 00:58:05 -08:00
Aaron Gyes
ce475c0b4c more int -> bool
all the things
2021-12-09 00:52:45 -08:00
Aaron Gyes
b3a4b23d9b sanity.{cpp,h}: remove, entirely unused
insane in the brain
2021-12-09 00:41:47 -08:00
Aaron Gyes
815502fa9e missed a spot in history.cpp.
path_get_data_is_remote is a bool, mostly.
2021-12-09 00:33:20 -08:00
Aaron Gyes
e65405ef52 int -> maybe_t<bool> 2021-12-09 00:29:37 -08:00
thibault
ceade1629d builtin commandline: add option to determine if pager is fully disclosed
Use the remaining_to_disclose count to determine if all completions
are shown (allows consistent behavior between short and long completion
lists).

Closes #8485
2021-12-04 22:43:39 +01:00
Johannes Altmanninger
4a575b26f5 Fix error check for repeated quoted command substitution
Commit e40eba358 (Treat text following quoted command substitution
as quoted) made parse_util_locate_cmdsubst_range() aware of quoted
command substitutions, by skipping surrounding text via quote_end().

However, it was not quite right. We fail to properly parse
two consecutive command substitutions in the same string,
because we don't maintain the quoting context across calls to
parse_util_locate_cmdsubst_range().  Let's track that bit in a
parameter. This allows us to get rid of the quote_end() hack.

Also apply this to the other place where we call
parse_util_locate_cmdsubst_range() in a loop (highlighting).

Fixes #8500
2021-12-04 16:56:07 +01:00