Skip to content

Commit

Permalink
DEBUG fails to find imported pefixed. Then lists duplicates.
Browse files Browse the repository at this point in the history
  • Loading branch information
HelioGuilherme66 committed Dec 10, 2024
1 parent faf351b commit 70b7a82
Show file tree
Hide file tree
Showing 8 changed files with 65 additions and 29 deletions.
19 changes: 11 additions & 8 deletions src/robotide/controller/ctrlcommands.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,8 @@ def _get_replace_values(self, new_name):
return self._value, new_name
return new_name, self._value

def notify_value_changed(self):
self._item.notify_value_changed()
def notify_value_changed(self, old_name=None):
self._item.notify_value_changed(old_name)


class _Command(object):
Expand Down Expand Up @@ -319,9 +319,10 @@ def _params(self):
def _execute(self, context):
self._observer.notify()
self._occurrences = self._find_occurrences(context) if self._occurrences is None else self._occurrences
print(f"DEBUG: ctlcommands.py RenameKeywordOccurrences _execute: found occurrences= {self._occurrences}")
self._replace_keywords_in(self._occurrences)
context.update_namespace()
self._notify_values_changed(self._occurrences)
self._notify_values_changed(self._occurrences, old_name=self._original_name)
self._observer.finish()

def _find_occurrences(self, context):
Expand All @@ -338,9 +339,9 @@ def _replace_keywords_in(self, occurrences):
oc.replace_keyword(self._new_name)
self._observer.notify()

def _notify_values_changed(self, occurrences):
def _notify_values_changed(self, occurrences, old_name=None):
for oc in occurrences:
oc.notify_value_changed()
oc.notify_value_changed(old_name)
self._observer.notify()

def _get_undo_command(self):
Expand Down Expand Up @@ -656,6 +657,7 @@ def __init__(self, keyword_name, keyword_info=None):
if keyword_name.strip() == '':
raise ValueError('Keyword name can not be "%s"' % keyword_name)
self.normalized_name = normalize_kw_name(keyword_name)
print(f"DEBUG: ctlcommands.py FindOccurrences INIT keyword_name={keyword_name}")
self._keyword_name = keyword_name
self._keyword_info = keyword_info
self._keyword_regexp = self._create_regexp(keyword_name)
Expand All @@ -670,7 +672,7 @@ def _create_regexp(keyword_name):
kw.name = keyword_name
return EmbeddedArgsHandler(kw).name_regexp
else: # Certain kws are not found when with Gherkin
name_regexp = fr'^(.*?){re.escape(keyword_name)}$'
name_regexp = fr'^(.*?){re.escape(keyword_name)}$' # DEBUG ([.]?) Consider kws from prefixed resources
name = re.compile(name_regexp, re.IGNORECASE)
return name

Expand Down Expand Up @@ -717,16 +719,17 @@ def _find_keyword_source(self, datafile_controller):

def _find_occurrences_in(self, items):
from .tablecontrollers import VariableTableController
print(f"DEBUG: ctrlcommands _find_occurrences_in NORMALIZED NAME {self.normalized_name}")
for item in items:
print(f"DEBUG: ctrlcommands _find_occurrences_in searching item={item}")
if self._contains_item(item) or (not isinstance(item, VariableTableController)
and (item.contains_keyword(self.normalized_name) or
item.contains_keyword(self.normalized_name.replace(' ', '_')))):
yield Occurrence(item, self._keyword_name)

def _contains_item(self, item):
self._yield_for_other_threads()
return item.contains_keyword(
self._keyword_regexp or self._keyword_name)
return item.contains_keyword(self._keyword_regexp or self._keyword_name)

@staticmethod
def _yield_for_other_threads():
Expand Down
6 changes: 4 additions & 2 deletions src/robotide/controller/macrocontrollers.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ def __init__(self, item):
self._item = item

def contains_keyword(self, name):
print(f"DEBUG: macrocontrollers.py ItemNameController contains_keyword: item={self._item.name} search="
f"{name}")
if isinstance(name, str):
return self._item.name == name
return name.match(self._item.name)
Expand All @@ -57,8 +59,8 @@ def replace_keyword(self, new_name, old_value=None):
def rename(self, new_name):
self._item.rename(new_name)

def notify_value_changed(self):
self._item.notify_name_changed()
def notify_value_changed(self, old_name=None):
self._item.notify_name_changed(old_name)

@property
def parent(self):
Expand Down
2 changes: 2 additions & 0 deletions src/robotide/controller/settingcontrollers.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ def keyword_name(self):

def contains_keyword(self, name):
istring = isinstance(name, str)
print(f"DEBUG: settingcontrollers.py _SettingController contains_keyword: item={self} search="
f"{name}")
matcher = name.match if not istring else lambda i: utils.eq(i, name)
return self._contains_keyword(matcher)

Expand Down
10 changes: 5 additions & 5 deletions src/robotide/controller/stepcontrollers.py
Original file line number Diff line number Diff line change
Expand Up @@ -285,11 +285,10 @@ def contains_keyword(self, name):
for item in [self.keyword or ''] + self.args)

def _kw_name_match(self, item, expected):
print(f"DEBUG: stepcontrollers.py StepController kw_name_match: item={item} expected={expected}")
if isinstance(expected, str):
return utils.eq(item, expected) or (
self._GIVEN_WHEN_THEN_MATCHER.match(item) and
utils.eq(
self._GIVEN_WHEN_THEN_MATCHER.sub('', item), expected))
return utils.eq(item, expected) or (self._GIVEN_WHEN_THEN_MATCHER.match(item) and
utils.eq(self._GIVEN_WHEN_THEN_MATCHER.sub('', item), expected))
return expected.match(item)

def replace_keyword(self, new_name, old_name):
Expand Down Expand Up @@ -552,7 +551,8 @@ def _recreate_next_step(self, index):
next_step = self.parent.step(index + 1)
next_step.recreate(next_step.as_list())

def notify_value_changed(self):
def notify_value_changed(self, old_name=None):
_ = old_name
self.parent.notify_steps_changed()

def increase_indent(self):
Expand Down
5 changes: 5 additions & 0 deletions src/robotide/publish/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,11 @@ class RideUserKeywordRemoved(RideUserKeyword):
data = ['datafile', 'name', 'item']


class RideUserKeywordRenamed(RideUserKeyword):
"""Sent after a user keyword is renamed"""
data = ['datafile', 'item', 'old_name']


class RideItem(RideDataChanged):
"""Base class for all messages about changes to any data item."""
data = ['item']
Expand Down
9 changes: 6 additions & 3 deletions src/robotide/ui/treeplugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
RideTestCaseAdded, RideUserKeywordRemoved, RideTestCaseRemoved, RideDataFileRemoved,
RideDataChangedToDirty, RideDataDirtyCleared, RideVariableRemoved, RideVariableAdded,
RideVariableMovedUp, RideVariableMovedDown, RideVariableUpdated, RideOpenResource,
RideSuiteAdded, RideSelectResource, RideDataFileSet)
RideSuiteAdded, RideSelectResource, RideDataFileSet, RideItemNameChanged)
from ..controller.ctrlcommands import MoveTo
from ..pluginapi import Plugin
from ..action import ActionInfo
Expand Down Expand Up @@ -306,6 +306,7 @@ def unregister_context_menu_hook(self, callable_m):
def _subscribe_to_messages(self):
subscriptions = [
(self._item_changed, RideItem),
(self._item_changed, RideItemNameChanged),
(self._resource_added, RideOpenResource),
(self._select_resource, RideSelectResource),
(self._suite_added, RideSuiteAdded),
Expand Down Expand Up @@ -734,8 +735,8 @@ def select_user_keyword_node(self, uk):
return
if not self.IsExpanded(parent_node):
self._expand_and_render_children(parent_node)
node = self.controller.find_node_with_label(
parent_node, utils.normalize(uk.name))
node = self.controller.find_node_with_label(parent_node, utils.normalize(uk.name))
print(f"DEBUG: treeplugin.py Tree select_user_keyword_node node= {node}")
if node != self.GetSelection():
self.SelectItem(node)

Expand Down Expand Up @@ -1086,6 +1087,8 @@ def on_move_down(self, event):
def _item_changed(self, message):
controller = message.item
node = self.controller.find_node_by_controller(controller)
if hasattr(message, 'old_name'):
print(f"DEBUG: treeplugin.py Tree _item_changed RENAMED node={node}, old_name={message.old_name}")
if node:
self.SetItemText(node, message.item.name)

Expand Down
36 changes: 26 additions & 10 deletions src/robotide/usages/UsageRunner.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import os.path
import time
from threading import Thread

Expand All @@ -29,11 +29,21 @@ def __init__(self, controller, highlight, name=None, kw_info=None):
self._kw_info = kw_info
self._controller = controller
self._highlight = highlight
# self.prefix = (os.path.basename(self._controller.data.source)
# .replace('robot', '').replace('resource', '')).split('.')
self.prefix = os.path.basename(self._controller.data.source).split('.')
if len(self.prefix) == 2 and self.prefix[-1] in ['resource', 'robot']:
self.prefix = self.prefix[0]
else:
self.prefix = ''
print(f"DEBUG: UsageRunner.py Usages INIT prefix={self.prefix}")
self._dlg = self._usages_dialog()
self._worker = Thread(target=self._run)
self._dialog_closed = False

def _usages_dialog(self):
print(f"DEBUG: UsageRunner.py Usages _usages_dialog ENTER name={self._name},"
f" controller_name={self._controller.name} prefix={self.prefix}")
if self._controller.name == self._name:
return usagesdialog.UsagesDialogWithUserKwNavigation(self._name, self._highlight, self._controller)
return usagesdialog.UsagesDialog(self._name)
Expand All @@ -46,15 +56,21 @@ def show(self):

def _run(self):
wx.CallAfter(self._begin_search)
for usage in self._find_usages():
time.sleep(0) # GIVE SPACE TO OTHER THREADS -- Thread.yield in Java
if self._dialog_closed:
return
wx.CallAfter(self._add_usage, usage)
names = [ self._name ]
if self.prefix != '' and '.' not in self._name:
names.append(f'{self.prefix}.{self._name}')
print(f"DEBUG: UsageRunner.py Usages _run before loop with _find_usages names={names}")
for name in names: # DEBUG
for usage in self._find_usages(name):
time.sleep(0) # GIVE SPACE TO OTHER THREADS -- Thread.yield in Java
if self._dialog_closed:
return
wx.CallAfter(self._add_usage, usage)
wx.CallAfter(self._end_search)

def _find_usages(self):
return self._controller.execute(commands.FindUsages(self._name, self._kw_info))
def _find_usages(self, name):
print(f"DEBUG: UsageRunner.py Usages _find_usages ENTER name={name} kw_info={self._kw_info}")
return self._controller.execute(commands.FindUsages(name, self._kw_info))

def _begin_search(self):
if not self._dialog_closed:
Expand Down Expand Up @@ -82,11 +98,11 @@ def _usages_dialog(self):
return usagesdialog.resource_import_usage_dialog(self._controller.display_name, self._highlight,
self._controller)

def _find_usages(self):
def _find_usages(self, name=None):
return self._controller.execute(commands.FindResourceUsages())


class VariableUsages(Usages):

def _find_usages(self):
def _find_usages(self, name=None):
return self._controller.execute(commands.FindVariableUsages(self._name))
7 changes: 6 additions & 1 deletion src/robotide/usages/usagesdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ def __init__(self, name, usages=None):
self.SetForegroundColour(Colour(self.color_foreground))
self._add_view_components()
self.usages = usages or UsagesListModel([])
print(f"DEBUG: usagesdialog.py UsagesDialog INIT: usages={self.usages} NAME={name}")
self.usage_list = VirtualList(self, self.usages.headers,
self.usages)
self.usage_list.SetBackgroundColour(Colour(self.color_secondary_background))
Expand Down Expand Up @@ -78,6 +79,9 @@ def _add_view_components(self):
class UsagesDialogWithUserKwNavigation(UsagesDialog):

def __init__(self, name, highlight, controller, usages=None):
import os
print(f"DEBUG: usagesdialog.py UsagesDialogWithUserKwNavigation ENTER name={name},"
f" controller_name={controller.name} usages={usages}")
self.on_go_to_definition = lambda evt: highlight(controller, name)
UsagesDialog.__init__(self, name, usages=usages)

Expand Down Expand Up @@ -152,7 +156,8 @@ class ResourceImportListModel(_UsagesListModel):
def __init__(self, usages):
_UsagesListModel.__init__(self, usages)
self.headers = ['Name', 'Location']
self._cannot_rename_item_attr = wx.ListItemAttr()
# wxPyDeprecationWarning: Using deprecated class. Use ItemAttr instead
self._cannot_rename_item_attr = wx.ItemAttr() # wx.ListItemAttr()
self._cannot_rename_item_attr.SetBackgroundColour(wx.Colour(255, 64, 64))

def item_text(self, row, col):
Expand Down

0 comments on commit 70b7a82

Please sign in to comment.