anchor.diff:      executeButton.disabled = value;
       formatButton.disabled = value;
       reloadGistButton.disabled = value || gistId.isEmpty;
  -    var hasHintOrSolution =
  -        context.hint.isNotEmpty || context.solution.isNotEmpty;
  -    showHintButton.disabled = value || !hasHintOrSolution;
  +    showHintButton.disabled = value;
     }
   
     Future<void> _loadAndShowGist(String id, {bool analyze = true}) async {
       editorIsBusy = true;
  +
       final GistLoader loader = deps[GistLoader];
       final gist = await loader.loadGist(id);
       context.dartSource = gist.getFile('main.dart')?.content ?? '';
       context.testMethod = gist.getFile('test.dart')?.content ?? '';
       context.solution = gist.getFile('solution.dart')?.content ?? '';
       context.hint = gist.getFile('hint.txt')?.content ?? '';
  +    tabController.setTabVisibility('test', context.testMethod.isNotEmpty);
  +    showHintButton.hidden = context.hint.isEmpty && context.testMethod.isEmpty;
       editorIsBusy = false;
   
       if (analyze) {
  
positive.code:   DisableableButton showHintButton;
  
    DElement navBarElement;
    TabController tabController;
    TabView editorTabView;
    TabView testTabView;
    TabView solutionTabView;
  
negative.code:     _disabled = value;
      _element.toggleClass(disabledClassName, value);
    }
  
    set hidden(bool value) {
      _element.toggleAttr('hidden', value);
    }
  }
  
  class Octicon {
  