Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,19 +21,15 @@ internal class RenameFlyoutViewModel : INotifyPropertyChanged, IDisposable
private readonly InlineRenameSession _session;
private OleComponent? _oleComponent;
private bool _disposedValue;
private bool _isReplacementTextValid = true;
public event PropertyChangedEventHandler? PropertyChanged;

public RenameFlyoutViewModel(InlineRenameSession session)
{
_session = session;
_session.ReplacementTextChanged += OnReplacementTextChanged;

_previewChangesFlag = _session.PreviewChanges;
_renameFileFlag = _session.Options.RenameFile;
_renameInStringsFlag = _session.Options.RenameInStrings;
_renameInCommentsFlag = _session.Options.RenameInComments;
_renameOverloadsFlag = _session.Options.RenameOverloads;

_session.ReplacementsComputed += OnReplacementsComputed;
ComputeRenameFile();
RegisterOleComponent();
}

Expand All @@ -50,7 +46,7 @@ public string IdentifierText
}
}

public bool AllowFileRename => _session.FileRenameInfo == InlineRenameFileRenameInfo.Allowed;
public bool AllowFileRename => _session.FileRenameInfo == InlineRenameFileRenameInfo.Allowed && _isReplacementTextValid;
public bool ShowFileRename => _session.FileRenameInfo != InlineRenameFileRenameInfo.NotAllowed;

public string FileRenameString => _session.FileRenameInfo switch
Expand All @@ -60,73 +56,53 @@ public string IdentifierText
_ => EditorFeaturesResources.Rename_symbols_file
};

private bool _renameInCommentsFlag;
public bool RenameInCommentsFlag
{
get => _renameInCommentsFlag;
get => _session.Options.RenameInComments;
set
{
if (Set(ref _renameInCommentsFlag, value))
{
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameInComments), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameInComments = value });
}
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameInComments), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameInComments = value });
}
}

private bool _renameInStringsFlag;
public bool RenameInStringsFlag
{
get => _renameInStringsFlag;
get => _session.Options.RenameInStrings;
set
{
if (Set(ref _renameInStringsFlag, value))
{
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameInStrings), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameInStrings = value });
}
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameInStrings), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameInStrings = value });
}
}

private bool _renameFileFlag;
public bool RenameFileFlag
{
get => _renameFileFlag;
get => _session.Options.RenameFile;
set
{
if (Set(ref _renameFileFlag, value))
{
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameFile), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameFile = value });
}
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameFile), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameFile = value });
}
}

private bool _previewChangesFlag;
public bool PreviewChangesFlag
{
get => _previewChangesFlag;
get => _session.PreviewChanges;
set
{
if (Set(ref _previewChangesFlag, value))
{
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.PreviewChanges), value);
_session.SetPreviewChanges(value);
}
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.PreviewChanges), value);
_session.SetPreviewChanges(value);
}
}

private bool _renameOverloadsFlag;
public bool RenameOverloadsFlag
{
get => _renameOverloadsFlag;
get => _session.Options.RenameOverloads;
set
{
if (Set(ref _renameOverloadsFlag, value))
{
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameOverloads), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameOverloads = value });
}
_session.RenameService.GlobalOptions.SetGlobalOption(new OptionKey(InlineRenameSessionOptionsStorage.RenameOverloads), value);
_session.RefreshRenameSessionWithOptionsChanged(_session.Options with { RenameOverloads = value });
}
}

Expand Down Expand Up @@ -238,6 +214,7 @@ protected virtual void Dispose(bool disposing)
if (disposing)
{
_session.ReplacementTextChanged -= OnReplacementTextChanged;
_session.ReplacementsComputed -= OnReplacementsComputed;

UnregisterOleComponent();
}
Expand All @@ -246,11 +223,26 @@ protected virtual void Dispose(bool disposing)
}
}

private void ComputeRenameFile()
{
// If replacementText is invalid, we won't rename the file.
RenameFileFlag = _isReplacementTextValid && AllowFileRename && _session.Options.RenameFile;
}

private void OnReplacementTextChanged(object sender, EventArgs e)
{
NotifyPropertyChanged(nameof(IdentifierText));
}

private void OnReplacementsComputed(object sender, IInlineRenameReplacementInfo result)
{
if (Set(ref _isReplacementTextValid, result.ReplacementTextValid, "IsReplacementTextValid"))
{
ComputeRenameFile();
NotifyPropertyChanged(nameof(AllowFileRename));
}
}

private void NotifyPropertyChanged([CallerMemberName] string? name = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,6 @@ public RegexEmbeddedLanguage(
return tree == null ? default : (tree, token);
}

internal async Task<RegexTree> TryGetTreeAtPositionAsync(
Document document, int position, CancellationToken cancellationToken)
{
var (tree, _) = await TryGetTreeAndTokenAtPositionAsync(
document, position, cancellationToken).ConfigureAwait(false);
return tree;
}

public string EscapeText(string text, SyntaxToken token)
=> _provider.EscapeText(text, token);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net6.0-windows</TargetFramework>
</PropertyGroup>

<ItemGroup>
Expand Down