Skip to content

Instantly share code, notes, and snippets.

@willsam100
Created December 11, 2018 17:48
Show Gist options
  • Save willsam100/a2f65e645b87cba275c6dd23e401f646 to your computer and use it in GitHub Desktop.
Save willsam100/a2f65e645b87cba275c6dd23e401f646 to your computer and use it in GitHub Desktop.
namespace FooBarIde
{
class InsertDateHandler : CommandHandler
{
protected override void Run()
{
Document doc = IdeApp.Workbench.ActiveDocument;
try
{
var lineCount = doc.Editor.LineCount;
var lines = new List<MonoDevelop.Ide.Editor.IDocumentLine>();
for (var i = 0; i < lineCount; i++)
{
var x = doc.Editor.GetLine(i);
if (x != null)
lines.Add(x);
}
var result =
lines.Where(x =>
{
var line = doc.Editor.GetLineText(x.LineNumber);
return line.Contains("open");
});
if (result.Any())
{
var lineNumber = result.OrderByDescending(x => x.LineNumber).First();
var text = "open Foo";
doc.Editor.InsertText(lineNumber.EndOffsetIncludingDelimiter, text);
doc.Editor.InsertText(lineNumber.EndOffsetIncludingDelimiter + text.Length, "\n");
}
else
{
var openeing =
lines.Where(x =>
{
var line = doc.Editor.GetLineText(x.LineNumber);
return line.Contains("module") || line.Contains("namesapce");
});
if (result.Count() != 0)
{
var lineNumber = openeing.OrderByDescending(x => x.LineNumber).First();
doc.Editor.InsertText(lineNumber.Offset + lineNumber.Length + 1, "open Foo\n");
}
else
{
var lineNumber = openeing.OrderByDescending(x => x.LineNumber).First();
doc.Editor.InsertText(0, "open Foo");
}
}
}
catch (Exception e)
{
MessageService.ShowError("Something failed", "Error details", e);
LoggingService.LogInternalError("Something failed...", e);
}
}
protected override void Update(CommandInfo info)
{
Document doc = IdeApp.Workbench.ActiveDocument;
info.Enabled = doc != null && doc.Editor != null;
}
}
public enum DateInserterCommands
{
InsertDate,
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment