1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-20 18:45:07 +00:00
serenity/Userland/Applications/TextEditor/FileArgument.cpp
Mustafa Quraish 8378ecc67b TextEditor/FileArgument: Remove file existance check for early exit
This check was fine earlier when we had access to the full filesystem,
but now that we are moving away from applications having unveiled
access to the filesystem, this check would just get rejected from
the kernel. This is rare / fast enough that performance should not
really matter in any case.
2021-09-10 20:46:50 +04:30

56 lines
1.8 KiB
C++

/*
* Copyright (c) 2021, ry755 <ryanst755@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "FileArgument.h"
#include <LibCore/File.h>
#include <LibRegex/Regex.h>
namespace TextEditor {
FileArgument::FileArgument(String file_argument)
{
m_line = {};
m_column = {};
// A file doesn't exist with the full specified name, maybe the user entered line/column coordinates?
Regex<PosixExtended> re("^(.+?)(:([0-9]+):?([0-9]+)?)?$");
RegexResult result = match(file_argument, re, PosixFlags::Global | PosixFlags::Multiline | PosixFlags::Ungreedy);
auto& groups = result.capture_group_matches.at(0);
// Match 0 group 0: file name
// Match 0 group 1: line number
// Match 0 group 2: column number
if (groups.size() > 3) {
// Both a line and column number were specified.
auto filename = groups.at(0).view.to_string();
auto initial_line_number = groups.at(1).view.to_string().to_int();
auto initial_column_number = groups.at(2).view.to_string().to_int();
m_filename = filename;
if (initial_line_number.has_value() && initial_line_number.value() > 0)
m_line = initial_line_number.value();
if (initial_column_number.has_value())
m_column = initial_column_number.value();
} else if (groups.size() == 3) {
// Only a line number was specified.
auto filename = groups.at(0).view.to_string();
auto initial_line_number = groups.at(1).view.to_string().to_int();
m_filename = filename;
if (initial_line_number.has_value() && initial_line_number.value() > 0)
m_line = initial_line_number.value();
} else {
// A colon was found at the end of the file name but no values were found after it.
m_filename = groups.at(0).view.to_string();
}
}
FileArgument::~FileArgument()
{
}
}