Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[PT Run] Calculator plugin: Various improvements #18159

Merged
merged 23 commits into from
Jun 2, 2022

Conversation

htcfreek
Copy link
Collaborator

@htcfreek htcfreek commented May 8, 2022

Summary of the Pull Request

What is this about:
This PR implements various improvements for the plugin.

image

image

What is included in the PR:
FIXES:

  • No output on queries like 1 or -1 and pi (No existing issue yet.)
  • Crash on empty query with keyword
  • Log doesn't contains the query on crash
  • Fix crashes in InputValid(System.String)
    • System.ArgumentNullException if only action char is entered and search term is empty
  • Fix crashes in CalculateEngine.Interpret()
    • System.FormatException on incorrect query when the result is converted to an error message
    • System.InvalidCastException (Unable to cast object of type 'System.Double[,]' to type 'System.IConvertible'. on query =[10,10]

NEW FEATURES:

  • Error message result on failed calculation
  • The following exceptions in CalculateEngine.Interpret() aren't fixed and were used to show an error message to the user when searching with keyword.
    • Mages.Core.ParseException
    • System.OverflowException (Value was either too large or too small for a Decimal.)
  • Log expected errors as error instead of exception
  • Plugin settings for choosing input and output culture: [PT Run] Calculator interprets comma used as number separator as decimal separator #17300 (comment)

REMOVED:

How does someone test / validate:

  • Input of the following queries on my local build:
    • =
    • =+pi(2)
    • =pi,
    • =log()
    • =pi
    • =[10,9]
    • =2^96
  • Update and run tests

Quality Checklist

Contributor License Agreement (CLA)

A CLA must be signed. If not, go over here and sign the CLA.

@htcfreek htcfreek self-assigned this May 8, 2022
@htcfreek htcfreek added Issue-Bug Something isn't working Idea-Enhancement New feature or request on an existing product Product-PowerToys Run Improved app launch PT Run (Win+R) Window labels May 8, 2022
@htcfreek htcfreek changed the title [PT Run] Various improvements [PT Run] Calculator plugin: Various improvements May 8, 2022
@github-actions
Copy link

github-actions bot commented May 22, 2022

@check-spelling-bot Report

🔴 Please review

See the files view or the action log for details.

Unrecognized words (2)

intepreted
occured

Previously acknowledged words that are now absent BGSOUNDS BUILDARCH CLIENTPULL dispid DISPIDAMBIENTDLCONTROL DLACTIVEXCTLS DLCONTROL DLIMAGES DOWNLOADONLY epo FANCYZONESWINDOWSTYLES FORCEOFFLINE FRAMEDOWNLOAD gsuberland HFONT Htmdid ICore IDCANCEL IDOK INITDIALOG IReflect IWindows IXaml lamotile METACHARSET mirophone mshtmdid NETFX netstandard Nvidia otating Postion preperty Redist ruleset RUNACTIVEXCTLS serizalization settingsv Setttings sourceid testtrocess Toolchain VDId xbf XBind XInstance
To accept these unrecognized words as correct (and remove the previously acknowledged and now absent words), run the following commands

... in a clone of the [email protected]:htcfreek/PowerToys.git repository
on the PT_Calc branch:

update_files() {
perl -e '
my @expect_files=qw('".github/actions/spell-check/expect.txt"');
@ARGV=@expect_files;
my @stale=qw('"$patch_remove"');
my $re=join "|", @stale;
my $suffix=".".time();
my $previous="";
sub maybe_unlink { unlink($_[0]) if $_[0]; }
while (<>) {
if ($ARGV ne $old_argv) { maybe_unlink($previous); $previous="$ARGV$suffix"; rename($ARGV, $previous); open(ARGV_OUT, ">$ARGV"); select(ARGV_OUT); $old_argv = $ARGV; }
next if /^(?:$re)(?:(?:\r|\n)*$| .*)/; print;
}; maybe_unlink($previous);'
perl -e '
my $new_expect_file=".github/actions/spell-check/expect.txt";
use File::Path qw(make_path);
use File::Basename qw(dirname);
make_path (dirname($new_expect_file));
open FILE, q{<}, $new_expect_file; chomp(my @words = <FILE>); close FILE;
my @add=qw('"$patch_add"');
my %items; @items{@words} = @words x (1); @items{@add} = @add x (1);
@words = sort {lc($a)."-".$a cmp lc($b)."-".$b} keys %items;
open FILE, q{>}, $new_expect_file; for my $word (@words) { print FILE "$word\n" if $word =~ /\w/; };
close FILE;
system("git", "add", $new_expect_file);
'
}

comment_json=$(mktemp)
curl -L -s -S \
-H "Content-Type: application/json" \
"https://api.github.com/repos/microsoft/PowerToys/issues/comments/1133865800" > "$comment_json"
comment_body=$(mktemp)
jq -r ".body // empty" "$comment_json" > $comment_body
rm $comment_json

patch_remove=$(perl -ne 'next unless s{^</summary>(.*)</details>$}{$1}; print' < "$comment_body")

patch_add=$(perl -e '$/=undef; $_=<>; if (m{Unrecognized words[^<]*</summary>\n*```\n*([^<]*)```\n*</details>$}m) { print "$1" } elsif (m{Unrecognized words[^<]*\n\n((?:\w.*\n)+)\n}m) { print "$1" };' < "$comment_body")

update_files
rm $comment_body
git add -u
If the flagged items do not appear to be text

If items relate to a ...

  • well-formed pattern.

    If you can write a pattern that would match it,
    try adding it to the patterns.txt file.

    Patterns are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your lines.

    Note that patterns can't match multiline strings.

  • binary file.

    Please add a file path to the excludes.txt file matching the containing file.

    File paths are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your files.

    ^ refers to the file's path from the root of the repository, so ^README\.md$ would exclude README.md (on whichever branch you're using).

@github-actions
Copy link

github-actions bot commented May 22, 2022

@check-spelling-bot Report

🔴 Please review

See the files view or the action log for details.

Unrecognized words (2)

Mothod
Qeury

Previously acknowledged words that are now absent BGSOUNDS BUILDARCH CLIENTPULL dispid DISPIDAMBIENTDLCONTROL DLACTIVEXCTLS DLCONTROL DLIMAGES DOWNLOADONLY epo FANCYZONESWINDOWSTYLES FORCEOFFLINE FRAMEDOWNLOAD gsuberland HFONT Htmdid ICore IDCANCEL IDOK INITDIALOG IReflect IWindows IXaml lamotile METACHARSET mirophone mshtmdid NETFX netstandard Nvidia otating Postion preperty Redist ruleset RUNACTIVEXCTLS serizalization settingsv Setttings sourceid testtrocess Toolchain VDId xbf XBind XInstance
To accept these unrecognized words as correct (and remove the previously acknowledged and now absent words), run the following commands

... in a clone of the [email protected]:htcfreek/PowerToys.git repository
on the PT_Calc branch:

update_files() {
perl -e '
my @expect_files=qw('".github/actions/spell-check/expect.txt"');
@ARGV=@expect_files;
my @stale=qw('"$patch_remove"');
my $re=join "|", @stale;
my $suffix=".".time();
my $previous="";
sub maybe_unlink { unlink($_[0]) if $_[0]; }
while (<>) {
if ($ARGV ne $old_argv) { maybe_unlink($previous); $previous="$ARGV$suffix"; rename($ARGV, $previous); open(ARGV_OUT, ">$ARGV"); select(ARGV_OUT); $old_argv = $ARGV; }
next if /^(?:$re)(?:(?:\r|\n)*$| .*)/; print;
}; maybe_unlink($previous);'
perl -e '
my $new_expect_file=".github/actions/spell-check/expect.txt";
use File::Path qw(make_path);
use File::Basename qw(dirname);
make_path (dirname($new_expect_file));
open FILE, q{<}, $new_expect_file; chomp(my @words = <FILE>); close FILE;
my @add=qw('"$patch_add"');
my %items; @items{@words} = @words x (1); @items{@add} = @add x (1);
@words = sort {lc($a)."-".$a cmp lc($b)."-".$b} keys %items;
open FILE, q{>}, $new_expect_file; for my $word (@words) { print FILE "$word\n" if $word =~ /\w/; };
close FILE;
system("git", "add", $new_expect_file);
'
}

comment_json=$(mktemp)
curl -L -s -S \
-H "Content-Type: application/json" \
"https://api.github.com/repos/microsoft/PowerToys/issues/comments/1133878682" > "$comment_json"
comment_body=$(mktemp)
jq -r ".body // empty" "$comment_json" > $comment_body
rm $comment_json

patch_remove=$(perl -ne 'next unless s{^</summary>(.*)</details>$}{$1}; print' < "$comment_body")

patch_add=$(perl -e '$/=undef; $_=<>; if (m{Unrecognized words[^<]*</summary>\n*```\n*([^<]*)```\n*</details>$}m) { print "$1" } elsif (m{Unrecognized words[^<]*\n\n((?:\w.*\n)+)\n}m) { print "$1" };' < "$comment_body")

update_files
rm $comment_body
git add -u
If the flagged items do not appear to be text

If items relate to a ...

  • well-formed pattern.

    If you can write a pattern that would match it,
    try adding it to the patterns.txt file.

    Patterns are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your lines.

    Note that patterns can't match multiline strings.

  • binary file.

    Please add a file path to the excludes.txt file matching the containing file.

    File paths are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your files.

    ^ refers to the file's path from the root of the repository, so ^README\.md$ would exclude README.md (on whichever branch you're using).

@github-actions
Copy link

github-actions bot commented May 29, 2022

@check-spelling-bot Report

🔴 Please review

See the files view or the action log for details.

Unrecognized words (3)

braket
schown
ueser

Previously acknowledged words that are now absent BGSOUNDS BUILDARCH CLIENTPULL dispid DISPIDAMBIENTDLCONTROL DLACTIVEXCTLS DLCONTROL DLIMAGES DOWNLOADONLY epo FANCYZONESWINDOWSTYLES FORCEOFFLINE FRAMEDOWNLOAD gsuberland HFONT Htmdid ICore IDCANCEL IDOK INITDIALOG IReflect IWindows IXaml lamotile METACHARSET mirophone mshtmdid NETFX netstandard Nvidia otating Postion preperty Redist ruleset RUNACTIVEXCTLS serizalization settingsv Setttings sourceid testtrocess Toolchain VDId xbf XBind XInstance
To accept these unrecognized words as correct (and remove the previously acknowledged and now absent words), run the following commands

... in a clone of the [email protected]:htcfreek/PowerToys.git repository
on the PT_Calc branch:

update_files() {
perl -e '
my @expect_files=qw('".github/actions/spell-check/expect.txt"');
@ARGV=@expect_files;
my @stale=qw('"$patch_remove"');
my $re=join "|", @stale;
my $suffix=".".time();
my $previous="";
sub maybe_unlink { unlink($_[0]) if $_[0]; }
while (<>) {
if ($ARGV ne $old_argv) { maybe_unlink($previous); $previous="$ARGV$suffix"; rename($ARGV, $previous); open(ARGV_OUT, ">$ARGV"); select(ARGV_OUT); $old_argv = $ARGV; }
next if /^(?:$re)(?:(?:\r|\n)*$| .*)/; print;
}; maybe_unlink($previous);'
perl -e '
my $new_expect_file=".github/actions/spell-check/expect.txt";
use File::Path qw(make_path);
use File::Basename qw(dirname);
make_path (dirname($new_expect_file));
open FILE, q{<}, $new_expect_file; chomp(my @words = <FILE>); close FILE;
my @add=qw('"$patch_add"');
my %items; @items{@words} = @words x (1); @items{@add} = @add x (1);
@words = sort {lc($a)."-".$a cmp lc($b)."-".$b} keys %items;
open FILE, q{>}, $new_expect_file; for my $word (@words) { print FILE "$word\n" if $word =~ /\w/; };
close FILE;
system("git", "add", $new_expect_file);
'
}

comment_json=$(mktemp)
curl -L -s -S \
-H "Content-Type: application/json" \
"https://api.github.com/repos/microsoft/PowerToys/issues/comments/1140434113" > "$comment_json"
comment_body=$(mktemp)
jq -r ".body // empty" "$comment_json" > $comment_body
rm $comment_json

patch_remove=$(perl -ne 'next unless s{^</summary>(.*)</details>$}{$1}; print' < "$comment_body")

patch_add=$(perl -e '$/=undef; $_=<>; if (m{Unrecognized words[^<]*</summary>\n*```\n*([^<]*)```\n*</details>$}m) { print "$1" } elsif (m{Unrecognized words[^<]*\n\n((?:\w.*\n)+)\n}m) { print "$1" };' < "$comment_body")

update_files
rm $comment_body
git add -u
If the flagged items do not appear to be text

If items relate to a ...

  • well-formed pattern.

    If you can write a pattern that would match it,
    try adding it to the patterns.txt file.

    Patterns are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your lines.

    Note that patterns can't match multiline strings.

  • binary file.

    Please add a file path to the excludes.txt file matching the containing file.

    File paths are Perl 5 Regular Expressions - you can test yours before committing to verify it will match your files.

    ^ refers to the file's path from the root of the repository, so ^README\.md$ would exclude README.md (on whichever branch you're using).

Copy link
Collaborator

@jaimecbernardo jaimecbernardo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes look good to me!
Thanks a lot for the contribution!
This is a big quality of life fix.

@jaimecbernardo jaimecbernardo merged commit 465df35 into microsoft:main Jun 2, 2022
@htcfreek htcfreek deleted the PT_Calc branch June 3, 2022 20:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Idea-Enhancement New feature or request on an existing product Issue-Bug Something isn't working Needs-Review This Pull Request awaits the review of a maintainer. Product-PowerToys Run Improved app launch PT Run (Win+R) Window
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants