Skip to content

Commit

Permalink
Improve node text and jump to code in Flutter Outline
Browse files Browse the repository at this point in the history
See #605.
  • Loading branch information
DanTup committed Mar 5, 2018
1 parent 1359f51 commit 793c170
Showing 1 changed file with 39 additions and 3 deletions.
42 changes: 39 additions & 3 deletions src/views/flutter_outline_view.ts
Expand Up @@ -4,6 +4,7 @@ import * as vs from "vscode";
import * as as from "../analysis/analysis_server_types";
import { Analyzer } from "../analysis/analyzer";
import { isAnalyzable } from "../utils";
import { editor } from "../../test/helpers";

const DART_SHOW_FLUTTER_OUTLINE = "dart-code:showFlutterOutline";

Expand Down Expand Up @@ -66,12 +67,12 @@ export class FlutterOutlineProvider implements vs.TreeDataProvider<FlutterWidget
public getChildren(element?: FlutterWidgetItem): FlutterWidgetItem[] {
if (!element) {
if (this.flutterOutline && this.flutterOutline.outline && this.flutterOutline.outline.children && this.flutterOutline.outline.length) {
return this.flutterOutline.outline.children.map((c) => new FlutterWidgetItem(c));
return this.flutterOutline.outline.children.map((c) => new FlutterWidgetItem(c, this.activeEditor));
} else {
return [];
}
} else {
return element.outline.children.map((c) => new FlutterWidgetItem(c));
return element.outline.children.map((c) => new FlutterWidgetItem(c, this.activeEditor));
}
}

Expand All @@ -91,14 +92,49 @@ export class FlutterOutlineProvider implements vs.TreeDataProvider<FlutterWidget
class FlutterWidgetItem extends vs.TreeItem {
constructor(
public readonly outline: as.FlutterOutline,
editor: vs.TextEditor,
) {
super(
outline.label || outline.kind,
FlutterWidgetItem.getLabel(outline),
outline.children && outline.children.length
? vs.TreeItemCollapsibleState.Collapsed
: vs.TreeItemCollapsibleState.None,
);

this.command = {
arguments: [{
at: "top",
lineNumber: editor.document.positionAt(outline.offset).line,
}],
command: "revealLine",
title: "",
};
}

public contextValue = "flutterWidget";

private static getLabel(outline: as.FlutterOutline): string {
let label = "";

if (outline.dartElement)
label += " " + outline.dartElement.name;

if (outline.variableName)
label += " " + outline.variableName;

if (outline.label)
label += " " + outline.label;

if (outline.attributes) {
// According to
// https://github.com/flutter/flutter-intellij/blob/d2bc014be391575b610be1af9dc9308127ce3826/src/io/flutter/preview/PreviewView.java#L1063
// we can hide the attribute names for text/icon if it's the sole attribute
if (outline.attributes.length === 1 && (outline.attributes[0].name === "text" || outline.attributes[0].name === "icon"))
label += " " + outline.attributes[0].label;
else
label += " " + outline.attributes.map((a) => a.name + ": " + a.label).join(", ");
}

return label.trim();
}
}

0 comments on commit 793c170

Please sign in to comment.